码迷,mamicode.com
首页 > 其他好文 > 详细

Observer(观察者)模式

时间:2015-06-02 17:51:17      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

在多个对象之间建立一对多的关系,以便当一个对象状态改变的时候,其他所有依赖于这个对象的对象都能得到通知,并被自动更新。

适用情况:

  • 当一个抽象模型有两个方面,其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
  • 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
  • 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。

技术分享

调用setChanged()方法,触发继承自Observable类的Observers()方法将这次改变广播出去。
notifyObservers()方法调用每个注册的观察者对象的update()方法。

BallisticsLabel对象不必保留对它监视的Tpeak对象的引用。而在BallisticsLabel类的构造器中,该对象被注册为Tpeak对象变化的监听器。当Tpeak对象发生变化时,该标签类的update()方法首先会收到一个类型为Observable的Tpeak对象,将该参数强制转化为Tpeak类对象之后,从该Tpeak类对象中提取数值,最后重新绘制该标签。上述变化从GUI层传递到业务层,最后又返回到GUI层。

该设计将业务逻辑对象与用于表示它的GUI元素相分离,有两个关键步骤:

  1. 实现Observer接口的观察者类必须向自己关注的对象注册自己,收到事件通知后,观察者类必须做出合适的操作,比如重新绘制自己,以完成更新。
  2. 拓展Observable类的被观察者类在它们的数据发生变化的时候,必须记得去通知相关的观察者。

         对于大型GUI应用程序,请务必将每个相关对象都注册为事件的监听器,而不要使用一个中介对象来监听所有的事件。
        MVC设计可以把应用程序划分成松散耦合的层,每个层可以独立发生变化,并且可以运行在不同的机器上。Observer模式支持MVC,这也促进了软件的分层,给软件开发和部署带来许多实在的好处。

Observer(观察者)模式

标签:

原文地址:http://blog.csdn.net/lindonglian/article/details/46332647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!