快速业务通道

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

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

Java设计模式之Observer模式

时间:2010-09-22

Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种。Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

本文介绍设计模式中的(Observer)模式的概念,用法,以及实际应用中怎么样使用Observer模式进行开发。

Observer模式的概念

Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

Observer模式的典型应用

- 侦听事件驱动程序设计中的外部事件

- 侦听/监视某个对象的状态变化

- 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者

Observer模式的优点

- 对象之间可以进行同步通信

- 可以同时通知一到多个关联对象

- 对象之间的关系以松耦合的形式组合,互不依赖

Observer模式的结构

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

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

时间:2010-09-22

Observer模式的角色:

Subject(被观察者)

被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。

ConcreteSubject

被观察者的具体实现。包含一些基本的属性状态及其他操作。

Observer(观察者)

接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。

ConcreteObserver

观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。

JDK对Observer模式的支持

JDK提供了对observer设计模式的支持:

- 通过java.util.Observable类扮演Subject角色,一个类只需通过继承java.util.Observable类便可担当ConcreteSubject角色;

- 通过java.util.Observer接口扮演Observer角色,一个类只需实现java.util.Observer接口便可担当ConcreteObserver角色。

- java.util.Observable的实现类通过调用setChanged()方法以及notifyObservers(Object)方法便可简单地通知Observer。

当然,我们也可以不使用JDK提供的类与接口而自己实现Observer模式。

Observer模式的应用范例

下面,我们使用JDK提供的接口与类来实现一个Observer模式用来模拟新闻订阅操作:

当一个新闻被发表时,系统一方面需要通知管理者审阅;另一方面需要通知订阅者。

文件一览:

Client

测试类。

NewsPublisher

相当于ConcreteSubject角色。该类继承相当于Subject角色的java.util.Observable类。

SubscriberObserver

相当于ConcreteObserver角色。该类实现了相当于Observer角色的java.util.Observer接口。当NewsPublisher对象发生变化时得到通知,并向订阅者发送订阅邮件。

ManagerObserver

相当于ConcreteObserver角色。该类实现了相当于Observer角色的java.util.Observer接口。当NewsPublisher对象发生变化时得到通知,并向管理者发送消息邮件。

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

时间:2010-09-22

News

封装了新闻数据的类,与Observer模式无直接关系。

代码:

import java.util.Observable; import java.util.Observer; public class Client {   /**    * Test Observer Pattern    * --    *    */   public static void main(String[] args) {     NewsPublisher publisher = new NewsPublisher();     //添加观察者对象     publisher.addObserver(new SubscriberObserver());     publisher.addObserver(new ManagerObserver());     //发布新闻,触发

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