设计模式的皇后-观察者模式
观察者是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新”。从这段话里我们可以得到两个信息,如下:
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
,这样,在帐户状态改变时,它们可以向销售人员发送一封电子邮件。
支付服务能够观察在线音乐商店中的歌曲播放事件,以便向客户收费。
设计模式的皇后-观察者模式相关推荐
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
设计模式 ( 十五 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...
- 设计模式(四) Observe——观察者模式
设计模式四 Observe--观察者模式 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于 ...
- Java 设计模式之《观察者模式》
很久之前,自己也曾看过一些设计模式的内容,最近在做一些程序代码设计的时,发现忘得差不多了,很多模式也只是有大致影响,决定重新将一些常用的模式复习一下.今天一个模式观察者模式. 观察者模式 观察者模式属 ...
- 设计模式学习(二): 观察者模式 (C#)
<深入浅出设计模式>学习笔记第二章 需求: 开发一套气象监测应用,如图: 气象站,目前有三种装置,温度.湿度和气压感应装置. WeatherData对象追踪气象站的数据,并更新到布告板,布 ...
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- Java设计模式10:观察者模式
观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他 ...
- 设计模式C++实现——观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsr ...
- 大话设计模式Python实现-观察者模式
观察者模式(发布-订阅模式 Publish Subscribe Pattern):定义了一种一对多的关系,让多个观察对象同时监听一个主题对象,当主题对象状态发生变化时会通知所有观察者,是它们能够自动更 ...
- 开发之路(设计模式二:观察者模式)
继续我们的设计模式学习,有个好的"观察者"可以让你开发效率大大提高 直接进入正题,我们用一个气象站程序来模拟此模式. 有一个气象站程序,能对湿度,温度,气压进行监测并显示在&quo ...
最新文章
- SAP SD基础知识之文本确定(Text Determination)
- swift中使用core data
- linux删除文件退出,在Linux中用于在移动或删除文件时使`tail -f`退出的bash脚本
- 如何高效排查系统故障?一分钱引发的系统设计“踩坑”案例
- Mahout实战---运行第一个推荐引擎
- 利用stat命令获取Linux文件系统和文件的详细状态信息
- 数字图像处理--图像二阶导数的推导
- jsp编写程序实现写读留言板内容的功能
- Storm之路-WordCount-实例
- 如何从Microsoft SQL Server生成C#类
- 没有任何一个行业是没有竞争的
- Linux 进程状态 说明
- ssms 缺少索引信息_搜索引擎整合营销
- 推荐系统--收藏起来慢慢研究
- python moviepy 从视频中提取音频
- 1.App Inventor开发环境构建
- php 闭合标记,什么叫自闭合标签?自闭标签有什么用
- 与谷歌AI领军科学家一较高下的梦想如何反应了中国对科技突破的追求?
- 百度深度学习框架paddlepaddle实战三——自家车牌识别
- 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程 2018.11 写的还可以