设计模式---观察者模式
2017-09-23 22:28
148 查看
定义
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。理解
一系列类似的对象,例如张三、李四、王五,订了报社的报纸。报社有新的报纸的时候,只要你是他们的订户,你就一直能收到报纸。看到这种需求,也许你会想到保存张三、李四、王五的引用,“有新报纸”的时候,调用循环调用这些引用的某个更新方法,以达到更新所有依赖对象的目的。
观察者模式其实就是这个思路。在这个模式中,报社叫“主题/被观察者/可观察者”,张三、李四、王五这些叫“观察者”。观察者可以“订阅”主题,主题更新状态后观察者就能得到通知,并更新自己。
代码
观察者接口及其实现类:public interface Observer { public void update(int result); } public class ZhangSan implements Observer { public ZhangSan(Subject subject) { subject.registerObserver(this); } @Override public void update(int result) { Log.e("ZXK","ZhangSan---result:"+result); } } public class LiSi implements Observer { public LiSi(Subject subject) { subject.registerObserver(this); } @Override public void update(int result) { Log.e("ZXK","LiSi---result:"+result); } } public class WangWu implements Observer { public WangWu(Subject subject) { subject.registerObserver(this); } @Override public void update(int result) { Log.e("ZXK","WangWu---result:"+result); } }
主题接口及其实现类:
public interface Subject { public void registerObserver(Observer observer); public void removeObserver(Observer observer); public void notifyObservers(); } public class Press implements Subject { private ArrayList<Observer> observers; public Press() { observers = new ArrayList<>(); } @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { int index = observers.indexOf(observer); if(index>=0){ observers.remove(index); } } @Override public void notifyObservers() { int result = new Random().nextInt(10); for(int i = 0;i<observers.size();i++){ Observer observer = observers.get(i); observer.update(result); } } }
测试:
Press press = new Press(); ZhangSan zhangSan = new ZhangSan(press); LiSi liSi = new LiSi(press); WangWu wangWu = new WangWu(press); press.notifyObservers();
总结
观察者模式的实现方式有很多种,本文将的是最常见的一种。观察者模式作用:相当于“一对多”版本的接口,观察者订阅后,主题一旦更新,观察者们会立刻得到通知。
相关文章推荐
- (转)设计模式之观察者模式在ListView中的应用
- 设计模式之观察者模式
- 观察者设计模式
- 设计模式读书笔记:Observer(观察者)
- 再看设计模式——观察者模式
- 设计模式之——观察者模式
- [python实现设计模式]-4.观察者模式-吃食啦!
- 设计模式--观察者模式
- 设计模式之观察者模式
- 设计模式-观察者模式(Java实现)
- 设计模式之观察者模式
- 初始设计模式7——观察者模式
- 设计模式之观察者模式
- [设计模式]观察者模式(Observer)
- 设计模式之观察者模式(Observer Pattern)
- C# 通过 Observer观察者 设计模式 来理解 抽象类 和 接口 应用在什么地方
- 设计模式之观察者模式
- iOS设计模式(MVC和单例模式,门面和装饰器模式,适配器和观察者模式以及备忘录和命令模式)
- 23种设计模式(8):观察者模式
- swift设计模式--观察者模式