快速业务通道

Java设计模式 - 观察者模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Java设计模式 - 观察者模式

时间:2011-01-17 GooooWei

观察者模式定义了一个一对多的对象关系:一个主体对象对应多个观察者对象。当主体对象发生改变时,所有它对应的观察者对象都会自动得到通知并更新。

本文将给出一个相应的事例具体说明观察者模式是如果工作的。这个事例演示了一个当一个任务的信息改变时通知这个任务所涉及所有人员的事例。任务信息包括任务状态,任务所采用的处理流程和任务完成后的checklist[用来确保任务完成所有预定需要完成的功能列表和避免一些常见的错误]。

先定义两个接口:主体对象接口和观察者对象接口。

/** *//**   * 主体对象接口定义了注册观察者,取消观察者和通知观察者方法。   *   */ public interface ISubject {     /** *//**      * 为该主体对象注册一个观察者。      */     public void registerObserver(IObserver observer);     /** *//**      * 从该主体对象中取消一个观察者的注册。      */     public void removeObserver(IObserver observer);     /** *//**      * 通知所有观察者。      */     public void notifyObserver(); }

/** *//**   * 观察者接口简单定义了一个用来更新观察者信息的接口。   * 当主体对象被更新时,这个接口方法会被自动调用并更新信息。   */ public interface IObserver {     /** *//**      * 接口方法用来更新观察者的信息。      */     public void remind(ITask taskSubject); }

这两个接口只定义了主题对象和观察者对象所需要的接口,但是没有实现任何任务相关的具体的方法和接口。下面会再定义一个任务接口来规定任务应该具备的功能。这样分开定义的好处在于,如果我们将不同的模块分解开来,如果一方需要更新,另一方不会受到影响。

/** *//**   * 这里定义了一个任务应该具有的功能。   */ public interface ITask {     public void setStatus(String status);     public String getStatus();     public void setProcess(String process);     public String getProcess();     public void setCheckList(String checkList);     public String getCheckList(); }

Java设计模式 - 观察者模式(2)

时间:2011-01-17 GooooWei

然后我们创建具体的任务主体。这里我们会实现ISubejct, ITask两个接口。

import java.util.ArrayList; import java.util.List; public class TaskSubject implements ISubject, ITask {

// 在这里对观察者列表进行初始化。因为是静态初始化,所以保证在这个运行过程中只有一个实例得到初始化。

  static {         _observers = new ArrayList<IObserver>();     }     @Override     public void notifyObserver() {         // 调用观察者的方法通知并更新观察者信息。         for(IObserver observer : _observers) {             observer.remind(this);         }     }     @Override     public void registerObserver(IObserver observer) {         if(_observers.contains(observer)) {             System.out.println("< " + observer + " > is already registed!");         }         // Register an observer         _observers.add(observer);         System.out.println("< " + observer + " > is registed successfully!");     }     @Override     public void

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号