您的位置:首页 > 编程语言 > C#

C#设计模式—观察者模式

2016-06-26 19:12 337 查看
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)观察者只知道目标对象发生了变化,但是不知道目标发生了什么样的变化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: