设计模Observer

设计模Observer

ID:21015616

大小:106.00 KB

页数:9页

时间:2018-10-18

设计模Observer_第1页
设计模Observer_第2页
设计模Observer_第3页
设计模Observer_第4页
设计模Observer_第5页
资源描述:

《设计模Observer》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方设计模式:Observer(观察器)----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方本页内容上下文问题影响因素解决方案示例结果上下文相关模式上下文在面向对象的编程中,对象同时包含数据和行为,这两者一起表示业务域的特定方面。使用对象生成应用程序的

2、优点之一是可以将所有数据操作封装在对象内。这样,就使对象成为独立的单位,并增加了在其他应用程序中重用对象的可能性。但是,对象无法在孤立状态下工作。在除最不重要的应用程序之外的所有应用程序中,对象必须协作才能完成更复杂的任务。当对象协作时,对象可能必须在对象状态发生更改时互相通知对方。例如,Model-View-Controller模式规定将业务数据(模型)与显示逻辑(视图)分离。当模型发生改变时,系统必须通知视图以便它可以刷新可视显示,并准确地反映模型的状态。换句话说,视图依赖于模型,以便获知模型内部状态的更改。返回页首

3、问题一个对象如何将状态更改通知其他对象,而又不依赖于这些对象的类?返回页首影响因素要解决此问题,就必须协调下列影响因素和注意事项:·将状态更改通知依赖对象的最容易的方法是直接调用它们。但是,对象之间的直接协作需要让它们的类建立相互的依赖性。例如,如果模型对象调用视图对象以便将更改通知它,则模型类现在也会依赖于视图类。两个对象之间的这种直接耦合(也称为紧耦合)降低了类的可重用性。例如,每当要重用模型类时,还必须重用视图类,因为模型会调用它。如果有多个视图,问题就更复杂了。·在事件驱动的框架中,经常出现需要耦合类的情况。框架

4、必须能够将事件通知应用程序,但是框架不能依赖于特定应用程序类。·同样,如果对视图类进行了更改,则模型很可能受到影响。包含许多紧耦合类的应用程序往往是脆弱的和难于维护的,因为一个类中的更改可能影响所有的紧耦合类。·如果直接调用依赖对象,则在每次添加新依赖项时,都必须对源对象内的代码进行修改。·在某些情况下,依赖性对象的数目在设计时可能是未知的。例如,如果您允许用户打开某个特定模型的多个窗口(视图),则必须在模型状态改变时更新多个视图。·直接的函数调用仍然是在两个对象之间传递信息时效率最高的方式(仅次于让两个对象的功能同时包

5、含在同一个对象中)。因此,使用其他机制将对象功能分隔开来很可能对性能有负面影响。取决于应用程序的性能要求,您可能必须对此进行权衡。返回页首----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方----------专业最好文档,专业为你服务,急你所急,供你所需-------------文档下载最佳的地方解决方案使用Observer模式在独立的对象(主体)中维护一个对主体感兴趣的依赖项(观察器)列表。让所有观察器各自实现公共的Observer接口,以取消主体和依赖性对象

6、之间的直接依赖关系(见图1)。同样,如果对视图类进行了更改,则模型很可能受到影响。包含许多紧耦合类的应用程序往往是脆弱的和难于维护的,因为一个类中的更改可能影响所有的紧耦合类。图1:基本的Observer结构在与依赖性对象相关的客户端中发生状态更改时,ConcreteSubject会调用Notify()方法。Subject超类用于维护所有感兴趣观察器组成的列表,以便让Notify()方法能够遍历所有观察器列表,并调用每个已注册的观察器上的Update()方法。观察器通过调用Subject上的subscribe()和uns

7、ubscribe()方法,来注册到更新和取消注册(见图2)。ConcreteObserver的一个或多个实例可能也会访问ConcreteSubject以获取详细信息,因此通常依赖于ConcreteSubject类。但是,如图1所示,ConcreteSubject类既不直接也不间接依赖于ConcreteObserver类。图2:基本的Observer交互使用在主体和观察器之间进行通信这种普通方法,可以动态而不是静态地构建协作。由于将通知逻辑与同步逻辑分离,因此可以添加新观察器而不必修改通知逻辑,而且也可以更改通知逻辑而不会

8、影响观察器中的同步逻辑。代码现在的分离程度更高,因此更易于维护和重用。将更改通知对象而不致于依赖这些对象的类是一项很常见的要求,因此,某些平台提供了语言支持来执行此功能。例如,Microsoft®.NETFramework定义了委托和事件这两个概念以实现Observer角色。因此,很少需要在.NET中显式地实

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。