设计模式-观察者模式

  观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让他们能够自动更新自己。

  观察者模式的组成:

  1. 主题(Subject):把所有对观察者(ObServer)保存在一个集合中,主题有任意数量的观察者。主题提供一个接口,可以增加和删除观察者角色。
  2. 观察者:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。

  观察者模式的应用场景:

  1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
  2. 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

  观察者模式的优点:

  1. Subject和Observer之间是松偶合的,分别可以各自独立改变。
  2. Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
  3. 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。

  观察者模式的缺陷:

  1. 偶合导致代码关系不明显,有时可能难以理解。
  2. 如果一个Subject被大量Observer订阅的话,在广播通知的时候可能会有效率问题。(毕竟只是简单的遍历)

  代码:观察者模式 + 依赖注入(IOC)

posted @ 2010-10-31 22:38  13路易的  阅读(151)  评论(0编辑  收藏  举报