研磨设计模式之观察者模式 学习笔记
2012-10-30 22:01
148 查看
按照模式的定义,目标和观察者之间是典型的一对多的关系。也可以是一对一的关系,只有一个观察者。
在观察者模式中,观察者和目标是单向依赖的,只有观察者依赖于目标,而目标是不会依赖于观察者的。
它们之间联系的主动权掌握在目标手中,只有目标知道什么时候需要通知观察者,在整个过程中,观察者始终是被动的,被动的等待目标的通知,等待目标传值给它。
对目标而言,所有的观察者都是一样的,目标会一视同仁的对待。当然也可以通过在目标里面进行控制,实现有区别对待观察者,比如某些状态变化,只需要通知部分观察者,但那是属于稍微变形的用法了,不属于标准的、原始的观察者模式了。
观察者模式的本质:触发联动。
当修改目标对象的状态的时候,就会触发相应的通知,然后会循环调用所有注册的观察者对象的相应方法,其实就相当于联动调用这些观察者的方法。
而且这个联动还是动态的,可以通过注册和取消注册来控制观察者,因而可以在程序运行期间,通过动态的控制观察者,来变相的实现添加和删除某些功能处理,这些功能就是观察者在update的时候执行的功能。
同时目标对象和观察者对象的解耦,又保证了无论观察者发生怎样的变化,目标对象总是能够正确地联动过来。
何时选用观察者模式
当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时候,依赖于它的观察者对象也会发生相应的变化。这样就把抽象模型的这两个方面分离开了,使得它们可以独立的改变和复用。
如果在更改一个对象的时候,需要同时连带改变其它的对象,而且不知道究竟应该有多少对象需要被连带改变,这种情况可以选用观察者模式,被更改的那一个对象很明显就相当于是目标对象,而需要连带修改的多个其它对象,就作为多个观察者对象了。
当一个对象必须通知其它的对象,但是你又希望这个对象和其它被它通知的对象是松散耦合的,也就是说这个对象其实不想知道具体被通知的对象,这种情况可以选用观察者模式,这个对象就相当于是目标对象,而被它通知的对象就是观察者对象了。
相关文章推荐
- 设计模式学习笔记之-观察者模式
- 设计模式学习笔记-观察者模式(Observer)
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
- 设计模式学习笔记--Observer Pattern观察者模式
- 设计模式学习笔记——观察者模式
- 【学习笔记】设计模式-观察者模式
- 设计模式C++学习笔记之一(Observer观察者模式)
- 设计模式学习笔记之观察者模式
- 设计模式学习笔记-观察者模式
- Java-马士兵设计模式学习笔记-观察者模式-OOD线程
- 设计模式学习笔记之观察者模式
- 【知了堂学习笔记】_Java中设计模式之观察者模式的学习
- 【设计模式】学习笔记2:观察者模式(Observer)
- 设计模式学习笔记--观察者模式
- HeadFirst 设计模式学习笔记2--观察者模式
- 设计模式之禅学习笔记--观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记--观察者模式
- 设计模式学习笔记-观察者模式
- 设计模式学习笔记--观察者模式(Observer Pattern)