《C#设计模式-观察者模式.ppt》由会员分享,可在线阅读,更多相关《C#设计模式-观察者模式.ppt(28页珍藏版)》请在三一办公上搜索。
1、Design Patterns,观察者模式,刘 伟(Sunny),大纲,观察者模式概述观察者模式的结构与实现观察者模式的应用实例观察者模式与.NET中的委托事件模型观察者模式与MVC观察者模式的优缺点与适用环境,观察者模式概述,交通信号灯与汽车示意图,观察者模式概述,分析交通信号灯 观察目标汽车(汽车驾驶员)观察者,一对多,观察者模式概述,分析软件系统:一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动观察者模式:定义了对象之间一种一对多的依赖关系,让一个对象的改变能够影响其他对象发生改变的对象称为观察目标,被通知的对象称为观察者一个观察目标可以对应多个观察者,
2、观察者模式概述,观察者模式的定义对象行为型模式,观察者模式概述,观察者模式的定义别名发布-订阅(Publish/Subscribe)模式模型-视图(Model/View)模式源-监听器(Source/Listener)模式从属者(Dependents)模式,观察者模式的结构与实现,观察者模式的结构,观察者模式的结构与实现,观察者模式的结构观察者模式包含以下4个角色:Subject(目标)ConcreteSubject(具体目标)Observer(观察者)ConcreteObserver(具体观察者),观察者模式的结构与实现,观察者模式的实现典型的抽象目标类代码:,观察者模式的结构与实现,观察者
3、模式的实现典型的具体目标类代码:,观察者模式的结构与实现,观察者模式的实现典型的抽象观察者代码:,观察者模式的结构与实现,观察者模式的实现典型的具体观察者代码:,观察者模式的结构与实现,观察者模式的实现说明:有时候在具体观察者类ConcreteObserver中需要使用到具体目标类ConcreteSubject中的状态(属性),会存在关联或依赖关系如果在具体层之间具有关联关系,系统的扩展性将受到一定的影响,增加新的具体目标类有时候需要修改原有观察者的代码,在一定程度上违背了开闭原则,但是如果原有观察者类无须关联新增的具体目标,则系统扩展性不受影响,观察者模式的结构与实现,观察者模式的实现典型的
4、客户端代码片段:,观察者模式的应用实例,实例说明,观察者模式的应用实例,实例分析及类图战队成员之间的联动过程:联盟成员受到攻击 发送通知给盟友 盟友做出响应,观察者模式的应用实例,实例分析及类图,多人联机对战游戏结构图,观察者模式的应用实例,实例代码(1)AllyControlCenter:指挥部(战队控制中心)类,充当抽象目标类(2)ConcreteAllyControlCenter:具体指挥部类,充当具体目标类(3)IObserver:抽象观察者类(4)Player:战队成员类,充当具体观察者类(5)Program:客户端测试类,演示,参考代码(DesignPatternObserverS
5、ample),观察者模式的应用实例,结果及分析两次对象之间的联动,触发链:Player.BeAttacked()AllyControlCenter.NotifyObserver()Player.Help(),观察者模式与.NET中的委托事件模型,分析事件源对象充当观察目标角色,委托对象充当抽象观察者角色,事件处理对象充当具体观察者角色如果事件源对象的某个事件触发,则调用事件处理对象中的事件处理程序来对事件进行处理,观察者模式与.NET中的委托事件模型,分析C#事件注册方法语法:eventSource表示事件源,someEvent表示定义在事件源中的事件,SomeEventHandler表示用于
6、处理事件的委托,someMethod表示与委托SomeEventHandler具有相同函数签名的事件处理方法只需要修改someMethod,即可实现相同的事件对应不同的事件处理程序.NET中的事件处理模型是观察者模式的一种变形,它与观察者模式的实现原理本质上是一致的,观察者模式与.NET中的委托事件模型,实例:自定义事件(1)EventTest:包含委托和事件的类(2)Program:客户端测试类,演示,参考代码(DesignPatternObserverExtend),观察者模式与MVC,MVC(Model-View-Controller)架构模型(Model),视图(View)和控制器(C
7、ontroller)模型可对应于观察者模式中的观察目标,而视图对应于观察者,控制器可充当两者之间的中介者当模型层的数据发生改变时,视图层将自动改变其显示内容,MVC结构示意图,观察者模式的优缺点与适用环境,模式优点可以实现表示层和数据逻辑层的分离在观察目标和观察者之间建立一个抽象的耦合支持广播通信,简化了一对多系统设计的难度符合开闭原则,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便,观察者模式的优缺点与适用环境,模式缺点将所有的观察者都通知到会花费很多时间如果存在循环依赖时可能导致系统崩溃没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而只是知道观察目标发生了变化,观察者模式的优缺点与适用环境,模式适用环境一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用一个对象的改变将导致一个或多个其他对象发生改变,且并不知道具体有多少对象将发生改变,也不知道这些对象是谁需要在系统中创建一个触发链,END,Thanks!,
链接地址:https://www.31ppt.com/p-6502411.html