观察者是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。从这段话里我们可以得到两个信息,如下:

1, 观察者(具体执行操作的对象,有多个)
2, 被观察者(顾名思义是被观察的对象,如果该对象发生某些变化则通知观察者执行对应的操)

所有被观察者都要继承的类 Observable.java

public class Observable {private boolean changed = false;private Vector obs;    //装有所有观察者的集合public Observable() {obs = new Vector();}/*** 将观察者加入到观察者集合中* @param o*/public synchronized void addObserver(Observer o) {if (o == null)throw new NullPointerException();if (!obs.contains(o)) {obs.addElement(o);}}public synchronized void deleteObserver(Observer o) {obs.removeElement(o);}/*** 通知所有的观察者*/public void notifyObservers() {notifyObservers(null);}/*** 与上面的方法比较 带了参数* @param arg*/public void notifyObservers(Object arg) {Object[] arrLocal;synchronized (this) {if (!changed)return;arrLocal = obs.toArray();clearChanged();}for (int i = arrLocal.length-1; i>=0; i--)((Observer)arrLocal[i]).update(this, arg);}public synchronized void deleteObservers() {obs.removeAllElements();}protected synchronized void setChanged() {changed = true;}protected synchronized void clearChanged() {changed = false;}public synchronized boolean hasChanged() {return changed;}public synchronized int countObservers() {return obs.size();}
}

所有观察者都要实现的接口 Observer.java

public interface Observer {void update(Observable o, Object arg);
}

观察者模式比较常用的场景

条形图可以观察它显示的数据对象,以便在这些对象变化时对它们进行重新绘制。

AccountManager 对象能够观察 Account,这样,在帐户状态改变时,它们可以向销售人员发送一封电子邮件。

支付服务能够观察在线音乐商店中的歌曲播放事件,以便向客户收费。

设计模式的皇后-观察者模式相关推荐

  1. 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    设计模式 ( 十五 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...

  2. 设计模式(四) Observe——观察者模式

    设计模式四 Observe--观察者模式 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于 ...

  3. Java 设计模式之《观察者模式》

    很久之前,自己也曾看过一些设计模式的内容,最近在做一些程序代码设计的时,发现忘得差不多了,很多模式也只是有大致影响,决定重新将一些常用的模式复习一下.今天一个模式观察者模式. 观察者模式 观察者模式属 ...

  4. 设计模式学习(二): 观察者模式 (C#)

    <深入浅出设计模式>学习笔记第二章 需求: 开发一套气象监测应用,如图: 气象站,目前有三种装置,温度.湿度和气压感应装置. WeatherData对象追踪气象站的数据,并更新到布告板,布 ...

  5. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式

    设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...

  6. Java设计模式10:观察者模式

    观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他 ...

  7. 设计模式C++实现——观察者模式

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsr ...

  8. 大话设计模式Python实现-观察者模式

    观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...

  9. 开发之路(设计模式二:观察者模式)

    继续我们的设计模式学习,有个好的"观察者"可以让你开发效率大大提高 直接进入正题,我们用一个气象站程序来模拟此模式. 有一个气象站程序,能对湿度,温度,气压进行监测并显示在&quo ...

最新文章

  1. SAP SD基础知识之文本确定(Text Determination)
  2. swift中使用core data
  3. linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本
  4. 如何高效排查系统故障?一分钱引发的系统设计“踩坑”案例
  5. Mahout实战---运行第一个推荐引擎
  6. 利用stat命令获取Linux文件系统和文件的详细状态信息
  7. 数字图像处理--图像二阶导数的推导
  8. jsp编写程序实现写读留言板内容的功能
  9. Storm之路-WordCount-实例
  10. 如何从Microsoft SQL Server生成C#类
  11. 没有任何一个行业是没有竞争的
  12. Linux 进程状态 说明
  13. ssms 缺少索引信息_搜索引擎整合营销
  14. 推荐系统--收藏起来慢慢研究
  15. python moviepy 从视频中提取音频
  16. 1.App Inventor开发环境构建
  17. php 闭合标记,什么叫自闭合标签?自闭标签有什么用
  18. 与谷歌AI领军科学家一较高下的梦想如何反应了中国对科技突破的追求?
  19. 百度深度学习框架paddlepaddle实战三——自家车牌识别
  20. 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程 2018.11 写的还可以

热门文章

  1. HTTP之一:http协议简介(3)
  2. 开始学习openlayer
  3. 我的asp.net mvc学习过程
  4. 查询各种物流运输信息
  5. HTML转图片利器:wkhtmltox
  6. for 循环新的写法==列表解析
  7. 从上千篇投稿脱颖而出,这5篇大数据论文凭什么征服KDD评委?
  8. 经验之谈—让你看明确block
  9. js关于子元素不触发父元素事件的若干方法
  10. Python学习日志(二)