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

这里以开店进货为例。

在讲之前解释英语单词:

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. Tomcat 中会话超时的相关配置

      QC同事提到似乎有时Tomcat的会话超时表现有问题,记录一下可能用到的配置. 1)超时时间的设定       tomcat的会话超时可以在多个级别上设置:tomcat实例级别.Web应用级别.s ...

  2. 转;说说AngularJS中的$parse和$eval

    说说AngularJS中的$parse和$eval AngularJS的初学者常常会对$parse和$eval两个内建服务感到有些困惑,今天我们就来说说AngularJS中的$parse和$eval. ...

  3. 卡特兰数(Catalan)简介

    Catalan序列是一个整数序列,其通项公式是 h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, ...

  4. JS动态增加页面上的控件实例

    <input   type="button"   value="继续添加"   onclick="append();"/ > & ...

  5. VS2008编译iconv静态链接库

    iconv是将一种编码格式转换为还有一种编码格式的开源库,比如能够把Windows环境下通用的ASCii(中文是GB2312)编码转换为国际通用的Unicode编码 iconv最新版本号仅仅支持Min ...

  6. 利用jxl读取excel合并的单元格的一个小样例

    工作中我们可能要把Excel文件的记录保存到数据库, 今天我用jxl读取Excel文件时遇到了合并格的问题,记录例如以下: 如Excel文件例如以下: watermark/2/text/aHR0cDo ...

  7. python之列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 1,比如:要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, ...

  8. .net 中实现php rawurlencode方法(RFC3986)

    在对接api时候,经常需要对字符串进行各种编码处理,系统可能是异构的,实现语言也就可能是不一样的.所以经常会使人犯一些2B的错误! 比如:php实现的api中用了rawurlencode,文档中写,需 ...

  9. jQuery源码,匿名函数自执行

    jQuery框架的首尾是这样写的()(), (function(window){//这个window是个入参,随便起个名字都行 //这里面全都是js代码 })(window)//这个括号里的windo ...

  10. Mysql 外键设置

    MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个:    一个是让数据库自己通过外键来保证数据的完整性和一致性    一个就是能够增加ER图的可读性    有些人认为外键的建立会给 ...