欢迎来到天天文库
浏览记录
ID:36419985
大小:3.62 MB
页数:28页
时间:2019-05-09
《C#设计模式-观察者模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DesignPatterns观察者模式刘伟(Sunny)weiliu_china@126.com大纲观察者模式概述观察者模式的结构与实现观察者模式的应用实例观察者模式与.NET中的委托事件模型观察者模式与MVC观察者模式的优缺点与适用环境观察者模式概述交通信号灯与汽车示意图观察者模式概述分析交通信号灯观察目标汽车(汽车驾驶员)观察者一对多观察者模式概述分析软件系统:一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动观察者模式:定义了对象之间一种一对多的依赖关系,让一个对象的改变能够影响其他对象发生改变的对象称为观
2、察目标,被通知的对象称为观察者一个观察目标可以对应多个观察者观察者模式概述观察者模式的定义对象行为型模式观察者模式:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都得到通知并被自动更新。ObserverPattern:Defineaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdatedautomatically.观察者模式概述观察者模式的定义别名发布-订阅(Publi
3、sh/Subscribe)模式模型-视图(Model/View)模式源-监听器(Source/Listener)模式从属者(Dependents)模式观察者模式的结构与实现观察者模式的结构观察者模式的结构与实现观察者模式的结构观察者模式包含以下4个角色:Subject(目标)ConcreteSubject(具体目标)Observer(观察者)ConcreteObserver(具体观察者)观察者模式的结构与实现观察者模式的实现典型的抽象目标类代码:usingSystem.CollectionabstractclassSubject{//定义一个观察者集合
4、用于存储所有观察者对象protectedArrayListobservers=newArrayList();//声明抽象注册方法,用于向观察者集合中增加一个观察者publicabstractvoidAttach(Observerobserver);//声明抽象注销方法,用于在观察者集合中删除一个观察者publicabstractvoidDetach(Observerobserver);//声明抽象通知方法publicabstractvoidNotify();}观察者模式的结构与实现观察者模式的实现典型的具体目标类代码:classConcreteSubj
5、ect:Subject{publicoverridevoidAttach(Observerobserver){observers.Add(observer);}publicoverridevoidDetach(Observerobserver){observers.Remove(observer);}//实现通知方法publicoverridevoidNotify(){//遍历观察者集合,调用每一个观察者的响应方法foreach(objectobsinobservers){((Observer)obs).Update();}}}观察者模式的结构与实现观
6、察者模式的实现典型的抽象观察者代码:interfaceObserver{voidUpdate();}观察者模式的结构与实现观察者模式的实现典型的具体观察者代码:classConcreteObserver:Observer{//实现响应方法publicvoidUpdate(){//具体更新代码}}观察者模式的结构与实现观察者模式的实现说明:有时候在具体观察者类ConcreteObserver中需要使用到具体目标类ConcreteSubject中的状态(属性),会存在关联或依赖关系如果在具体层之间具有关联关系,系统的扩展性将受到一定的影响,增加新的具体目标
7、类有时候需要修改原有观察者的代码,在一定程度上违背了开闭原则,但是如果原有观察者类无须关联新增的具体目标,则系统扩展性不受影响观察者模式的结构与实现观察者模式的实现典型的客户端代码片段:……Subjectsubject=newConcreteSubject();Observerobserver=newConcreteObserver();subject.Attach(observer);subject.Notify();……观察者模式的应用实例实例说明在某多人联机对战游戏中,多个玩家可以加入同一战队组成联盟,当战队中的某一成员受到敌人攻击时将给所有其他
8、盟友发送通知,盟友收到通知后将做出响应。现使用观察者模式设计并实现该过程,以实现战队成员之间的
此文档下载收益归作者所有