观察者模式
观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。
定义:一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
观察者模式的优点:
1.观察者增加或删除无需修改主题的代码,只需调用主题对应的增加或者删除的方法即可。
2.主题只负责通知观察者,但无需了解观察者如何处理通知。
3.观察者只需等待主题通知,无需观察主题相关的细节。
4.由于被动接受,正常情况下不会错过主题的改变通知。而主动获取的话,由于时机选取问题,可能导致错过某些状态。
缺点:
1.主题持有观察者的引用,如果未正常处理从主题中删除观察者,会导致观察者无法被回收。
2.如果观察者具体实现代码有问题,会导致主题和观察者对象形成循环引用,在某些采用引用计数的垃圾回收器可能导致无法回收。
观察者模式
- 本质:依赖触发联动——观察者和观察对象信息松散耦合,实时更新。
- 优点:动态联动、部分耦合、支持广播
- 缺点:性能浪费(不确定是不是所有观察者都需要信息)
- 使用场景:
- 一个抽象模型由两个方面构成,其中一个方面的操作依赖另外一个方面的状态的变化。
- 更改一个对象的同时需要连带更改其他对象,而不知道有多少对象是需要被连带改变的。
- 一个对象必须通知其他对象,你又希望这些对象之间松散耦合。
http://www.imooc.com/article/12017
http://www.imooc.com/article/11579