软件体系结构观察者模式.ppt

上传人:wuy****n92 文档编号:69722280 上传时间:2023-01-08 格式:PPT 页数:21 大小:825.35KB
返回 下载 相关 举报
软件体系结构观察者模式.ppt_第1页
第1页 / 共21页
软件体系结构观察者模式.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《软件体系结构观察者模式.ppt》由会员分享,可在线阅读,更多相关《软件体系结构观察者模式.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、OBSERVER(观察者)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。2.别名 依赖(Dependents)发布-订阅(Publish-Subscribe)1.意图 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,因为这样降低了它们的可重用性。3.动机 一个表格对象和一个柱状图对象可使用不同的表示形式描述同一个应用数据对象的信息。表格对象和柱状图对象互相并不知道对方的存在,这样使你可以根据需要单独复用表格或柱状图。但在这里是它们表现的似乎互相知道。当用户改变表

2、格中的信息时,柱状图能立即反映这一变化,反过来也是如此。这一行为意味着表格对象和棒状图对象都依赖于数据对象,因此数据对象的任何状态改变都应立即通知它们。同时也没有理由将依赖于该数据对象的对象的数目限定为两个,对相同的数据可以有任意数目的不同用户界面。Observer模式描述了如何建立这种关系。这一模式中的关键对象是目标(subject)和观察者(observer)。一个目标可以有任意数目的依赖它的观察者。一旦目标的状态发生改变,所有的观察者都得到通知。作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出

3、相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作(Collaboration)。观察者模式是满足这一要求的各种设计方案中最重要的一种。当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象是紧密耦合的。4.适用性5.结构 S

4、ubject(目标)目标知道它的观察者。可以有任意多个观察者观察同一个目标。提供注册和删除观察者对象的接口。Observer(观察者)为那些在目标发生改变时需获得通知的对象定义一个更新接口。ConcreteSubject(具体目标)将有关状态存入各ConcreteObserver对象。当它的状态发生改变时,向它的各个观察者发出通知。ConcreteObserver(具体观察者)维护一个指向ConcreteSubject对象的引用。存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。6.参与者 当ConcreteSubject发生任何可能

5、导致其观察者与其本身状态不一致的改变时,它将通知它的各个观察者。在得到一个具体目标的改变通知后,ConcreteObserver 对象可向目标对象查询信息。ConcreteObserver使用这些信息以使它的状态与目标对象的状态一致。7.协作 1)目标和观察者间的抽象耦合 2)支持广播通信 3)意外的更新8.效果 1)创建目标到其观察者之间的映射 2)观察多个目标 3)谁触发更新 a)由目标对象的状态设定操作在改变目标对象的状态后自动调用Notify。b)让客户负责在适当的时候调用Notify。4)对已删除目标的悬挂引用 5)在发出通知前确保目标的状态自身是一致的9.实现 6)避免特定于观察者

6、的更新协议推/拉模型 7)显式地指定感兴趣的改变 8)封装复杂的更新语义 ChangeManager有三个责任:a)它将一个目标映射到它的观察者并提供一个接口来维护这个映射。这就不需要由目标来维护对其观察者的引用,反之亦然。b)它定义一个特定的更新策略。c)根据一个目标的请求,它更新所有依赖于这个目标的观察者。9)结合目标类和观察者类abstract class Subject/Fieldsprivate ArrayList observers=new ArrayList();/Methodspublic void Attach(Observer observer)observers.Add(

7、observer);public void Detach(Observer observer)observers.Remove(observer);public void Notify()foreach(Observer o in observers)o.Update();/ConcreteSubjectclass ConcreteSubject:Subject/Fieldsprivate string subjectState;/Propertiespublic string SubjectStateget return subjectState;set subjectState=value

8、;/Observerabstract class Observer/Methodsabstract public void Update();/ConcreteObserverclass ConcreteObserver:Observer/Fieldsprivate string name;private string observerState;private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject subject,string name)this.subject=subject;this.name=na

9、me;override public void Update()observerState=subject.SubjectState;Console.WriteLine(Observer 0s new state is 1“,name,observerState);public ConcreteSubject Subjectget return subject;set subject=value;public class Clientpublic static void Main(string args)/Configure Observer structureConcreteSubject s=new ConcreteSubject();s.Attach(new ConcreteObserver(s,1);s.Attach(new ConcreteObserver(s,2);s.Attach(new ConcreteObserver(s,3);/Change subject and notify observerss.SubjectState=ABC;s.Notify();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁