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

这里以开店进货为例。

在讲之前解释英语单词:

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. Android---intent传递putStringArrayListExtra

    Intent是Activity与Activity之间,Activity与Service之间传递参数的介质,使用Intent和Bundle在组件之间传递数据,而这两种通常实现的是Java基本对象类型和S ...

  2. centos 环境下monolog+php 方案

    1.在项目中,日志系统有多重要详细所有程序员都知道,monolog就是一个最好的解决方案,有各种级别,各种日志存储方式,具体可以上monolog官方了解http://monolog.ow2.org/ ...

  3. HDU 2227 Find the nondecreasing subsequences

    题目大意:给定一个序列,求出其所有的上升子序列. 题解:一开始我以为是动态规划,后来发现离散后树状数组很好做,首先,c保存的是第i位上升子系列有几个,那么树状数组的sum就直接是现在的答案了,不过更新 ...

  4. 关于COOKIE使用过程为NULL

    关于COOKIE使用过程中的一个小问题在程序中要用到COOKIE,网站website/login/login.aspx传值userID到 website/web/tab/web.aspx中的FRAME ...

  5. 操蛋的UITableView重用机制

    1,背景 你可能会遇见一下情况: 使用UITableView加载数据,比如你的每一个cell上面有一个UITextField,当你在第一个cell的UITextField中写下了内容,开始下滑UITa ...

  6. [置顶] c++播放Flash文件

    最近由于需要在程序中使用Flash播放,所以学习了下如何播放Flash,这里使用atl库中的CAxWindow来处理我们要播放的Flash!由于Flash的很多接口我们都不知道,所以可以参考前一篇文章 ...

  7. 一个简单链表的C++实现

    /* LList.cpp * Author: Qiang Xiao * Time: 2015-07-12 */ #include<iostream> using namespace std ...

  8. hdoj 2222

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道 AC自动机.....trie树的建立 和 AC自动机的查询,,可作模版... 解题思路:AC的应用 ...

  9. Linux系统目录(转载)

    /         (这就是著名的根)├── bin         (你在终端运行的大多数程序,比如cp.mv...)├── boot         (内核放在这里,这个目录也经常被作为某个独立分 ...

  10. 「操作系统」:Linker Use static Libraries

    While static libraries are useful and essential tools, they are also a source of confusion to progra ...