《观察者模式教学提纲.ppt》由会员分享,可在线阅读,更多相关《观察者模式教学提纲.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、观察者模式观察者模式概述w交通信号灯与汽车示意图观察者模式概述w分析交通信号灯交通信号灯 观察目标观察目标汽车(汽车驾驶员)汽车(汽车驾驶员)观察者观察者一一一一对对对对多多多多观察者模式概述w分析软件系统:软件系统:一个对象的状态或行为的变化将导致其他一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变对象的状态或行为也发生改变,它们之间将产生,它们之间将产生联动联动观察者模式:观察者模式:定义了对象之间一种一对多的依赖关系,让一个对象的改变能够影响其他对象发生改变的对象称为观察目标,被通知的对象称为观察者一个观察目标可以对应多个观察者观察者模式概述w观察者模式的定义对象行为型对象
2、行为型模式模式观观察察者者模模式式:定义对象之间的一种一一对对多多依依赖赖关关系系,使得每当一一个个对对象象状状态态发发生生改改变变时,其相关依赖对象都都得得到到通通知知并被自并被自动动更新更新。Observer Pattern:Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.观察者模式概述w观察者模式的定义别名别名发布-订阅(Publish/Subscri
3、be)模式模型-视图(Model/View)模式源-监听器(Source/Listener)模式从属者(Dependents)模式观察者模式的结构与实现w观察者模式的结构观察者模式的结构与实现w观察者模式的结构观察者模式包含以下观察者模式包含以下4个角色:个角色:Subject(目标)ConcreteSubject(具体目标)Observer(观察者)ConcreteObserver(具体观察者)观察者模式的结构与实现w观察者模式的实现典型的抽象目标类代码:典型的抽象目标类代码:using System.Collectionabstract class Subject /定定义义一个一个观观察
4、者集合用于存察者集合用于存储储所有所有观观察者察者对对象象protected ArrayList observers=new ArrayList();/声明抽象注册方法,用于向声明抽象注册方法,用于向观观察者集合中增加一个察者集合中增加一个观观察者察者 public abstract void Attach(Observer observer);/声明抽象注声明抽象注销销方法,用于在方法,用于在观观察者集合中察者集合中删删除一个除一个观观察者察者 public abstract void Detach(Observer observer);/声明抽象通知方法声明抽象通知方法 public ab
5、stract void Notify();观察者模式的结构与实现w观察者模式的实现典型的具体目标类代码:典型的具体目标类代码:class ConcreteSubject:Subjectpublic override void Attach(Observer observer)observers.Add(observer);public override void Detach(Observer observer)observers.Remove(observer);/实现实现通知方法通知方法public override void Notify()/遍遍历观历观察者集合,察者集合,调调用每一个
6、用每一个观观察者的响察者的响应应方法方法foreach(object obs in observers)(Observer)obs).Update();观察者模式的结构与实现w观察者模式的实现典型的抽象观察者代码:典型的抽象观察者代码:interface Observervoid Update();观察者模式的结构与实现w观察者模式的实现典型的具体观察者代码:典型的具体观察者代码:class ConcreteObserver:Observer /实现实现响响应应方法方法public void Update()/具体更新代具体更新代码码观察者模式的结构与实现w观察者模式的实现典型的客户端代码片段
7、:典型的客户端代码片段:Subject subject=new ConcreteSubject();Observer observer=new ConcreteObserver();subject.Attach(observer);subject.Notify();观察者模式的应用实例w实例说明在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队中的某一成员受到敌人攻击时将给所有其他盟友发送通知,盟友收到通知后将做出响应。现使用观察者模式设计并实现该过程,以实现战队成员之间的联动。观察者模式的应用实例w实例分析及类图战队成员之间的联动过程:战队成员之间的联动过程:联盟成员受到攻击
8、发送通知给盟友 盟友做出响应观察者模式的应用实例w实例分析及类图多人联机对战游戏结构图多人联机对战游戏结构图观察者模式w观察者模式实例与解析实例一:猫、狗与老鼠实例一:猫、狗与老鼠 假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。观察者模式w观察者模式实例与解析实例一:猫、狗与老鼠实例一:猫、狗与老鼠 观察者模式的优缺点与适用环境w模式优点可以可以实现表示层和数据逻辑层的分离实现表示层和数据逻辑层的分离在观察目标和观察者之间在观察目标和观察者之间建立一个抽象的建立一个抽象的耦合耦合支持支持广播通信广播通信,简化了一对多系统设计的简化了一对多系统设
9、计的难度难度符合开闭原则符合开闭原则,增加新的具体观察者无须,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加目标之间不存在关联关系的情况下,增加新的观察目标也很方便新的观察目标也很方便观察者模式的优缺点与适用环境w模式缺点将所有的观察者都通知到会将所有的观察者都通知到会花费很多时花费很多时间间如果存在如果存在循环依赖循环依赖时时可能导致系统崩溃可能导致系统崩溃没有相应的机制让观察者知道所观察的没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的目标对象是怎么发生变化的,而只是知,而只是知道观察目标发生了变
10、化道观察目标发生了变化观察者模式的优缺点与适用环境w模式适用环境一个抽象模型有两个方面,其中一个抽象模型有两个方面,其中一个方面依一个方面依赖于另一个方面赖于另一个方面,将这两个方面封装在独立,将这两个方面封装在独立的对象中使它们的对象中使它们可以各自独立地改变和复用可以各自独立地改变和复用一个对象的改变将导致一个或多个其他对象一个对象的改变将导致一个或多个其他对象发生改变发生改变,且并,且并不知道具体有多少对象将发不知道具体有多少对象将发生改变生改变,也,也不知道这些对象是谁不知道这些对象是谁需要在系统中需要在系统中创建一个触发链创建一个触发链ENDEND此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢