设计模式:观察者模式
来源:互联网 发布:mac docker ycm 编辑:程序博客网 时间:2024/06/05 20:37
想象一个很常见的应用场景,当对象A在做某件事的时候,触发B做某件事。这样一个功能很容易实现,最容易想到的有两种。
1.创建一个轮询角色;
2.在对象A中调用对象B;
1.创建一个轮询角色;
//被监视对象
Public interface IA{ Public void dosomethingA();}Public class ConcreteA implements IA{ Private Boolean isDoingA = false; Public void dosomethingA() { “I am doing A” isDoingA = true; } Public isDoingA() { Return isDoingA; } Public clear() { isDoingA = false; }}
//反馈对象
Public interface IB{ Public void update();}Public class ConcreteB implements IB{ Public void update() { “update my self” }}
//监视者
Class Spy extends Threads{ Private ConcertA m_concertA;Private ConcertB m_concertB;//监视者要绑定监视的对象和要反馈的对象Public Spy(ConcertA _concertA, ConcertB _concertA){ This. m_concertA = _concertA;This. m_concertB= _concertB;}
Public void run(){ While(true) { If(this.m_concertA.isDoingA()) { This.concertB.update();This.concertA.clear();}}}}
3.在对象A中调用对象B;
去掉spy对象
Public class ConcreteA implements IA{ ConcertB m_concertB = new ConcertB(); Public void dosomethingA() { “I am doing A”m_concertB.update();}}
以上两种方法存在的共同缺陷是当需要通知多个观察者的时候,到需要在上述源码中进行修改,严重违反的开闭原则(对修改关闭,对扩展开放)
于是提出观察者模式解决上述问题:
Public interface Observable{ Public void addObserver(Observable observable); Public void deleteObserver(Observable observable); Public void notifyObservers(Srting context);}public interface Oberver{ public void update();}Public class ConcreteA implements IA, Observable{ Private Arraylist<Observer> observerlist = new Arraylist<Observer>() Public void dosomethingA() { “I am doing A” This.notifyObservers(“A is doing A”); } Public void addObserver(Observable observable) { This. Observerlist.add(observable); } Public void deleteObserver(Observable observable) { This. Observerlist.remove(observable); } Public void notifyObservers(Srting context) { For(Observer observer:observerlist) { Observer.update(); } }}
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- tcmalloc内存池
- svn命令简介及生成补丁脚本
- oracle中DECIMAL(m,n)在MySql使用方法
- python 图像问题
- jvisualvm分析工具
- 设计模式:观察者模式
- 动态控制状态栏显示与隐藏
- [leetcode]240. Search a 2D Matrix II
- iTunes Connect上传APP屏幕快照图片尺寸和屏幕分辨率大小
- 461. Hamming Distance
- 纪念自己第一个人品爆发
- A
- http://blog.csdn.net/painsonline/article/details/7183613
- 做课题调查的方法