Observer设计模式【利用商品概念解释】
每个人都想过着富有的生活,这是很正常的。
这里以开店进货为例。
在讲之前解释英语单词:
Observer:查看;遵守
Observable:可见的,公开的。
从单词可以知道:商品用来卖,所以公开,继承【extends】了商品的基本属性[Observable].
对于商品,监管部门要对它实行【implements】监管,让其符合相关法律法规
package patterns.actions.observer; import java.util.Observable; /**
* 商品要放在柜台上卖,那么它就要接收各种部门检查
*这里设置:知识产权 和 物价部门
* @author one
*
*/
public class ProductObservable extends Observable { public static String productName;
public static Float price; public String getProductName() {
return productName;
} /*
* 商品名称 有时需要更新
* */
public void setProductName(String productName) {
this.productName = productName;
//让知识产权管理部门看看
super.setChanged();
super.notifyObservers(this.productName);
}
public Float getPrice() {
return price;
} /*
* 商品的价格也是要更新
* @param price
*/
public void setPrice(Float price) {
this.price = price;
//让物价局来看看
super.setChanged();
super.notifyObservers(this.price);
} }
package patterns.actions.observer; import java.util.Observable;
import java.util.Observer; public class PriceObserver implements Observer { //物价局
@Override
public void update(Observable o, Object arg) {
if(arg==ProductObservable.price){
ProductObservable myProduct =(ProductObservable) o;
System.out.println("PriceObserver price changed to "+myProduct.getPrice());
} } }
package patterns.actions.observer; import java.util.Observable;
import java.util.Observer; public class NameObserver implements Observer { //知识产权部门只关心商标名称的改变
@Override
public void update(Observable o, Object arg) {
if(arg==ProductObservable.productName){
ProductObservable myProduct=(ProductObservable) o;
System.out.println("NameObserver name changed to "+myProduct.getProductName());
}
} }
开店的基本过程设置好了,那么就开店吧。
package patterns.actions.observer; /**
* 开店了
* @author one
*
*/
public class Test { public static void main(String[] args) {
//商店来了一批商品
ProductObservable product=new ProductObservable();
//在上架之前,要经过部门审查,要有执照才能用。
product.addObserver(new NameObserver());
product.addObserver(new PriceObserver()); //好了,拿到商品销售执照,可以上架了。
product.setPrice(100.0f);
product.setProductName("Beer");
} }
商品上架符合规则,所以监管部门都通过了,得出结果为:
PriceObserver price changed to 100.0
NameObserver name changed to Beer
好了,其实有时写程序,所谓的架构,也是来源于生活。
Observer设计模式【利用商品概念解释】的更多相关文章
- 利用 SPL 快速实现 Observer 设计模式
目录: 1.什么是 SPL 2.SplSubject 和 SplObserver 接口 3.为什么使用 SplObjectStorage 类 4.模拟案例 5.结束语 6.下载资源 什么是 SPL S ...
- faster-rcnn原理及相应概念解释
R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...
- (转)使用CGLIB实现AOP功能与AOP概念解释
http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...
- Observer设计模式中-委托事件-应用在消息在窗体上显示
Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...
- 转载:C#中委托、事件与Observer设计模式
原文地址 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 感谢博主分享! 范例说明 假设 ...
- pageadmin CMS网站制作教程:模板概念解释
pageadmin CMS网站建设教程:模板概念解释 1.模板页 又叫视图页面,PageAdmin后台栏目或信息中用到的模板页面的统称,格式必须是.cshtml后缀文件,前端人员制作的页面默认都是ht ...
- 委托、事件与Observer设计模式
范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1. ...
- CNN中feature map、卷积核、卷积核的个数、filter、channel的概念解释
CNN中feature map.卷积核.卷积核的个数.filter.channel的概念解释 参考链接: https://blog.csdn.net/xys430381_1/article/detai ...
- C#委托与事件之观察者Observer设计模式
前言 委托: 委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针. 或委托可以看成一种表示函数的数据类型,类似函数指针. 事件是特殊的委托 观察者模式:两种角色:(1)Subj ...
随机推荐
- Protel99se教程九:protel99se中PCB设计的高级应用
在上一节我们PCB资源网的protel99se教程当中,我们给大家讲解了在protel99se进行原理图设计中的一些高级应用技巧,在这一节protel99se教程当中,我们将给大家讲解的是,在prot ...
- protel99se中做拼板图解
很多时候我们要在protel99se中做拼板, 但是通常在复制进行拼版的时候会出现如下的效果,元件被重新命名了. 而无法达到我们需要的像下图的效果 那我们怎么办,才能达到上图的效果呢?其实操作很简单. ...
- systemd.service 中文手册
版权声明 本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. 无担保:本文译者不保证译文内容准确无误,亦不承担任何由于使用此文档所导致的损失. 自由使用:任何人都可以自 ...
- Qt 4.6: A Quick Start to Qt Designer
Qt 4.6: A Quick Start to Qt Designer A Quick Start to Qt Designer Using Qt Designer involves four ba ...
- mySQL中replace的用法
MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪 mysql replace实例说明: ...
- Windows Server 2012 安装dll到GAC
使用Windows管理员打开PowerShell: 运行以下命令: Set-location "c:\tools\gac" [System.Reflection.Assembly] ...
- Windows 无法启动xx服务 错误1053:服务没有及时响应启动或控制请求
症状:win7系统的很多系统关键服务,启动不了,双击该服务也弹不了操作框,系统服务是设置为自动 的,但是就是启动不了,在本地服务窗口中只能启动该服务,但是双击会弹不了窗口,你点启动后会出现错误提示10 ...
- Onvif协议
ONVIF致力于通过全球性的开放界面标准来推进网络视频在安防市场的应用,这一接口界面标准将确保不同厂商生产的网络视频监控产品具有互通性.2008年11月,论坛正式发布了ONVIF第一版规范ONVIF核 ...
- 字符串匹配算法(KMP)
字符串匹配运用很广泛,举个简单例子,我们每天登QQ时输入账号和密码,大家有没有想过账号和密码是怎样匹配的呢?登录需要多长时间和匹配算法的效率有直接的关系. 首先理解一下前缀和后缀的概念: 给出一个问题 ...
- Map接口的学习
接口Map<K, V> 一.Map功能 1.添加 put(K key, V value) putAll(Map<? extends K, ? extends V>); 2.删除 ...