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

这里以开店进货为例。

在讲之前解释英语单词:

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. 电脑bios到底是什么?

    没有哪个玩电脑的人不知道电脑bios,但是真正能明白bios是什么的?身边却没几个,甚至大多数电脑维修站的人员对bios也不够详细了解.一般人不去关心bios是因为它离我们的电脑真正使用仍有一段距离. ...

  2. elasearch 版本控制

    http://192.168.32.81:9200/library/books/8/ GET { "_index": "library", "_typ ...

  3. [转]关于SQL分页存储过程的分析

    [转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用 ...

  4. 【蓝桥杯】入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  5. 10003 Cutting Sticks(区间dp)

      Cutting Sticks  You have to cut a wood stick into pieces. The most affordable company, The Analog ...

  6. vue开发体验

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  7. jquery选择器控制Html元素

    1.JQuery中有addClass,removeClass,toggleClass addClass(class):为每个匹配的元素添加指定的类名 removeClass(class):从所有匹配的 ...

  8. Qt下如何修改文件的时间(全平台修改)

    提供一个全平台修改文件的时间的方法,希望大家喜欢 /* UTIME.C: This program uses _utime to set the * file-modification time to ...

  9. android handler工作原理

    android handler工作原理 作用 便于在子线程中更新主UI线程中的控件 这里涉及到了UI主线程和子线程 UI主线程 它很特别.通常我们会认为UI主线程将页面绘制完成,就结束了.但是它没有. ...

  10. 解读Google分布式锁服务

    解读Google分布式锁服务  背景介绍 在2010年4月,Google的网页索引更新实现了实时更新,在今年的OSDI大会上,Google首次公布了有关这一技术的论文. 在此之前,Google的索引更 ...