每个人都想过着富有的生活,这是很正常的。

这里以开店进货为例。

在讲之前解释英语单词:

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设计模式【利用商品概念解释】的更多相关文章

  1. 利用 SPL 快速实现 Observer 设计模式

    目录: 1.什么是 SPL 2.SplSubject 和 SplObserver 接口 3.为什么使用 SplObjectStorage 类 4.模拟案例 5.结束语 6.下载资源 什么是 SPL S ...

  2. faster-rcnn原理及相应概念解释

    R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左 ...

  3. (转)使用CGLIB实现AOP功能与AOP概念解释

    http://blog.csdn.net/yerenyuan_pku/article/details/52864395 使用CGLIB实现AOP功能 在Java里面,我们要产生某个对象的代理对象,这个 ...

  4. Observer设计模式中-委托事件-应用在消息在窗体上显示

    Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...

  5. 转载:C#中委托、事件与Observer设计模式

    原文地址 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 感谢博主分享! 范例说明 假设 ...

  6. pageadmin CMS网站制作教程:模板概念解释

    pageadmin CMS网站建设教程:模板概念解释 1.模板页 又叫视图页面,PageAdmin后台栏目或信息中用到的模板页面的统称,格式必须是.cshtml后缀文件,前端人员制作的页面默认都是ht ...

  7. 委托、事件与Observer设计模式

    范例说明 上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些: 假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1. ...

  8. CNN中feature map、卷积核、卷积核的个数、filter、channel的概念解释

    CNN中feature map.卷积核.卷积核的个数.filter.channel的概念解释 参考链接: https://blog.csdn.net/xys430381_1/article/detai ...

  9. C#委托与事件之观察者Observer设计模式

    前言    委托: 委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针. 或委托可以看成一种表示函数的数据类型,类似函数指针. 事件是特殊的委托 观察者模式:两种角色:(1)Subj ...

随机推荐

  1. 使用django+celery+RabbitMQ实现异步执行

    http://www.yu180.com/group/view/259 推荐一个解决框架 https://github.com/maccman/juggernaut Realtime server p ...

  2. HDOJ Sudoku Killer(dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1426 思路分析:该问题为数独问题,明显解是唯一的,所有采用dfs搜索效果更好: 在搜索时,可以通过3个 ...

  3. GLSL中的各种变量总结

    1.uint CreateShader(enum type) : 创建空的shader object; type: VERTEX_SHADER, 2.void ShaderSource(uint sh ...

  4. Swift语言iOS开发:CALayer十则示例

    如你所知,我们在iOS应用中看到的都是视图(view),包括按钮视图.表视图.滑动条视图,还有可以容纳其他视图的父视图等. AD:[活动]Web和APP兼容性实战 Win10训练营免费报名 如你所知, ...

  5. nvarchar and nchar

    Same: 1.store unicode charactor. 2. A charactor is stroed with 2 bytes. Different. 1. nchar  会自动填充数据 ...

  6. Oracle创建表、索引、主键、字段描述

    -- 创建表 create table SX04_LBALANCE ( YEAR VARCHAR2(10) not null, PROGRAMNO VARCHAR2(40) not null, FDA ...

  7. linux驱动调试--段错误之oops信息分析

    linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id= ...

  8. is,as,sizeof,typeof,GetType

    这几个符号说来也多多少少的用过,今天就根据ProC#的讲述来总结一下:   1. IS:    检查变量类型是否与指定类型相符,返回True ,False.不报错.    老实说,我没怎么用过.看看下 ...

  9. BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )

    15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------ ...

  10. 用pc浏览器打开手机页面

    原理是仿造http包头,下面已chrome为例. 方法:运行->输入如下手机操作系统对应的代码即可. 安卓: chrome.exe --user-agent="Mozilla/5.0 ...