Java语言观察者模式介绍 - 编程入门网
atched w)
{
w.addObserver(this);
}
public void update( Observable ob, Object arg)
{
System.out.println("Data has been changed to: ''" + ((Watched)ob).retrieveData() + "''");
}
}
代码清单9、Watcher类的源代码。 可以看出,虽然客户端将Watched对象的内部状态赋值了四次,但是值的改变只有三次:
代码清单10、被观察者的内部状态发生了改变。 对应地,Watcher对象汇报了三次改变,下面就是运行时间程序打印出的信息:
代码清单11、运行的结果。 菩萨的守瓶龟 想当年齐天大圣为解救师傅唐僧,前往南海普陀山请菩萨降伏妖怪红孩儿:“菩萨听说...恨了一声,将手中宝珠净瓶往海心里扑的一掼...只见那海当中,翻波跳浪,钻出个瓶来,原来是一个怪物驮着出来...要知此怪名和姓,兴风作浪恶乌龟。” 使用面向对象的语言描述,乌龟便是一个观察者对象,它观察的主题是菩萨。一旦菩萨将净瓶掼到海里,就象征着菩萨作为主题调用了notifyObservers()方法。在西游记中,观察者对象有两个,一个是乌龟,另一个是悟空。悟空的反应在这里暂时不考虑,而乌龟的反应便是将瓶子驮回海岸。 图10、菩萨和菩萨的守瓶乌龟。 菩萨作为被观察者对象,继承自Observable类;而守瓶乌龟作为观察者,继承自Observer接口;这个模拟系统的实现可以采用Java对观察者模式的支持达成。 Java语言观察者模式介绍(8)时间:2010-07-08Java中的DEM事件机制 AWT中的DEM机制 责任链模式一章中曾谈到,AWT1.0的事件处理的模型是基于责任链的。这种模型不适用于复杂的系统,因此在AWT1.1版本及以后的各个版本中,事件处理模型均为基于观察者模式的委派事件模型(Delegation Event Model或DEM)。 在DEM模型里面,主题(Subject)角色负责发布(publish)事件,而观察者角色向特定的主题订阅(subscribe)它所感兴趣的事件。当一个具体主题产生一个事件时,它就会通知所有感兴趣的订阅者。 使用这种发布-订阅机制的基本设计目标,是提供一种将发布者与订阅者松散地耦合在一起的联系形式,以及一种能够动态地登记、取消向一个发布者的订阅请求的办法。显然,实现这一构思的技巧,是设计抽象接口,并把抽象层和具体层分开。这在观察者模式里可以清楚地看到。 使用DEM的用词,发布者叫做事件源(event source),而订阅者叫做事件聆听者(event listener)。在Java里面,事件由类代表,事件的发布是通过同步地调用成员方法做到的。 Servlet技术中的的DEM机制 AWT中所使用的DEM事件模型实际上被应用到了所有的Java事件机制上。Servlet技术中的事件处理机制同样也是使用的DEM模型。 SAX2技术中的DEM机制 DEM事件模型也被应用到了SAX2的事件处理机制上。 观察者模式的效果 观察者模式的效果有以下的优点: 第一、观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。 由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。如果被观察者和观察者都被扔到一起,那么这个 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |