Java设计模式——Observer(观察者)模式

来源:互联网 发布:韩国恢复汉字 知乎 编辑:程序博客网 时间:2024/05/13 03:32

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

适用情况:

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



调用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,这也促进了软件的分层,给软件开发和部署带来许多实在的好处。
0 0
原创粉丝点击