1、观察者模式定义
定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。属于对象行为模式。
2、观察者模式
1)目标类(Subject):指的是被观察的对象,定义一个观察者的集合。一个观察目标可以被多个观察者观察。目标提供一系列方法来增加和删除观察者对象。目标类可以是接口类,也可以是抽象了或具体类。
2)具体目标类(ConcreteSubject):具体目标是目标类的子类,通常包含经常发生改变的数据,当具体目标类的状态发生改变时,将向它的各个观察者发出通知;同时它还实现了在目标类中定义的抽象业务方法。
3)管擦者类(Observer):对观察目标的改变做出反应,观察者一般定义为接口,该接口声明了更新数据的方法Update(),因此又称为抽象观察者。
4)具体观察者类(ConcreteObserver):在具体观察者中维护一个指向具体目标对象的引用,用来存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致。
3、应用实例
在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队的某一成员受到敌人攻击时,将给其他盟友发送通知,盟友受到通知后将做出响应。
其中角色分配:AllyControlCenter:战队指挥中心,充当抽象目标;ConcreteAllyControlCenter:具体指挥部,充当具体目标类;IObserver:观察者;Player:具体观察者,即队员。
应用实例链接:http://download.csdn.net/detail/qq_30507287/9560143
4、观察者模式优点
1)可以实现表示层和数据逻辑层的分离,定义了稳定的消息更新传递机制,并抽象了更新接口,使得可以有各种各样不同的表示层充当具体观察者角色。
2)观察目标和观察者之间建立一个抽象的耦合,观察目标只需要维持一个抽象观察者的集合,无须了解具体观察者。
3)支持广播通信,观察目标会向所有已注册的观察者对象发送通知,简化一对多系统设计的难度。
4)符合开闭原则。
5、观察者模式缺点
1)如果在观察者和目标者之间存在循环依赖,观察目标会触发它们进行循环调用,可能会导致系统崩溃。
2)观察者只知道目标对象发生了变化,但是不知道目标发生了什么样的变化。