快速业务通道

Java设计模式之Observer模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
通知事件     publisher.publishNews("Hello news", "news body");   } } /** * Subject ROLE * NewsPublisher: news publisher * */ class NewsPublisher extends Observable {   public void publishNews(String newsTitle, String newsBody) {     News news = new News(newsTitle, newsBody);     setChanged();    //通过setChanged()方法标明对象的状态已发生变化     System.out.println("News published:" + newsTitle);     this.notifyObservers(news);  //通知各Observer,并发送一个名为news对象的消息     //other process ... such as save news to database   } } /** * Observer ROLE * */ class SubscriberObserver implements Observer {   public void update(Observable observee, Object param) {     if (param instanceof News) {       mail2Subscriber((News)param);     }   }   private void mail2Subscriber(News news) {     System.out.println("Mail to subscriber. A news published with title:" + news.getTitle());   } } /** * Observer ROLE * */ class ManagerObserver implements Observer {   public void update(Observable observee, Object param) {     if (param instanceof News) {       mail2Manager((News)param);     }   }   private void mail2Manager(News news) {     System.out.println("Mail to Manager. A news published with title:" + news.getTitle());   } } //data entity class News {   private String title;   private String body;   public News(String title, String body) {     this.title = title;     this.body = body;   }   public String getBody() {     return body;   }   public void setBody(String body) {     this.body = body;   }   public String getTitle() {     return title;   }   public void setTitle(String title) {     this.title = title;   } }

执行Client,输出结果:

C:Observer>javac *.java C:Observer>java Client News published:Hello news Mail to Manager. A news published with title:Hello news Mail to subscriber. A news published with title:Hello news C:Observer>

NewsPublisher通过setChanged()与notifyObservers(Object)方法通知Observer对象SubscriberObserver与ManagerObserver。

Java设计模式之Observer模式(4)

时间:2010-09-22

不适用jdk支持的情况下的代码

Observer模式的好处是:它解除了观察者和目标之间的耦合关系。目标不需要知道它的观察者的任何信息。相反,目标只是允许观察者订阅事件。当目标产生一个事件时,它简单地将事件传给每一个观察者。

看看下面的Java示例:

public interface Subject {    public void addObserver( Observer o );    public void removeObserver( Observer o ); }

上面的代码中,Subject接口定义了两个方法(method),每个Subject都必须实现它们,以使Observer可以在Subject中增加或删除自身。

public interface Observer {    public void update( Subject o ); }

Observer接口(如上)列出了一个方法(method),每个Observer都必须实现它,以使Subject可以发送更新消息给Observer。

下面看看Subject的一个简单的实现--IntegerDataBag:

import java.util.ArrayList; import java.util.Iterator; public

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号