别碰我电影结局意义:设计模式-观察者模式的JDK实现
来源:百度文库 编辑:偶看新闻 时间:2024/04/30 20:58:49
设计模式-观察者模式的JDK实现
关键字: 设计模式 今天在翻查JAVA API的时候发现了特别的类java.util.Observable和接口java.util.Observer,细看发现原来是java类库实现观察着(Observer)模式的类和接口。
观察者模式定义:
观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF给观察者模式如下定义:定义对象Observer间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
Observable和Observer的说明:
继承于Observable的子类表示被观察的对象,实现了接口Observer的类表示观察者.在下面的例子中继承于Observable的子类 NewsDispatcher(新闻派发器)表示被观察的对象,在有新的新闻的时候会把新闻内容派发给所有的订阅者(Reader),Reader是实现了Observer接口的类表示读者。
Observable的简单功能介绍:
addObserver(Observer o)
clearChanged() 清除变化,则把“变化标志”设为false
countObservers() 统计观察着数量
deleteObserver(Observer o) 删除观察者
deleteObservers() 删除所有的观察者
hasChanged() 测试是否有变化(则返回“变化标志”)
notifyObservers() 如果hasChanged()=ture,通知所有的观察着(则调用Observer.update()方法)
notifyObservers(Object arg) 如果hasChanged()=ture,通知所有的观察着(则调用Observer.update()方法),并把参数arg传过去
setChanged() 设置变化,则把“变化标志”设为true
Observable的简单功能介绍
update(Observable o, Object arg) Observable唯一的方法,在被通知时被Observable调用
例子代码:
Java代码
- package
com.pasu.observer; -
- import
java.util.Observable; -
- public
class NewsDispatcher extends Observable - {
-
-
public void addNews(String news) -
{ -
this.setChanged(); -
this.notifyObservers(news); -
} - }
package com.pasu.observer;import java.util.Observable;public class NewsDispatcher extends Observable{ public void addNews(String news) { this.setChanged(); this.notifyObservers(news); }}
Java代码
- package
com.pasu.observer; -
- import
java.util.Observable; - import
java.util.Observer; -
- public
class Reader implements Observer - {
-
private String name; -
-
public Reader(String name) -
{ -
this.name = name; -
} -
-
@Override -
public void update(Observable o, Object arg) -
{ -
String news = (String)arg; -
System.out.println(name + " : " + news); -
} -
-
- }
package com.pasu.observer;import java.util.Observable;import java.util.Observer;public class Reader implements Observer{ private String name; public Reader(String name) { this.name = name; } @Override public void update(Observable o, Object arg) { String news = (String)arg; System.out.println(name + " : " + news); } }
Java代码
- package
com.pasu.observer; -
- public
class Test - {
-
public static void main(String[] args) -
{ -
//体育新闻派发器 -
NewsDispatcher sportNewsDispatcher = new NewsDispatcher(); -
//it新闻派发器 -
NewsDispatcher itNewsDispatcher = new NewsDispatcher(); -
//观察者r1,r2,r3 -
Reader r1 = new Reader("r1"); -
Reader r2 = new Reader("r2"); -
Reader r3 = new Reader("r3"); -
//添加观察者 -
sportNewsDispatcher.addObserver(r1); -
sportNewsDispatcher.addObserver(r2); -
itNewsDispatcher.addObserver(r3); -
//当有新的新闻的时候,通知观察者 -
sportNewsDispatcher.addNews("中国队突破了历史获得了世界杯冠军!"); -
itNewsDispatcher.addNews("ibm 收购 );sun公司,java开始收费!" -
} - }
package com.pasu.observer;public class Test{ public static void main(String[] args) { //体育新闻派发器 NewsDispatcher sportNewsDispatcher = new NewsDispatcher(); //it新闻派发器 NewsDispatcher itNewsDispatcher = new NewsDispatcher(); //观察者r1,r2,r3 Reader r1 = new Reader("r1"); Reader r2 = new Reader("r2"); Reader r3 = new Reader("r3"); //添加观察者 sportNewsDispatcher.addObserver(r1); sportNewsDispatcher.addObserver(r2); itNewsDispatcher.addObserver(r3); //当有新的新闻的时候,通知观察者 sportNewsDispatcher.addNews("中国队突破了历史获得了世界杯冠军!"); itNewsDispatcher.addNews("ibm 收购 sun公司,java开始收费!"); }}
Test类运行输出的结果
Java代码
- r2
: 中国队突破了历史,获得了世界杯冠军! - r1
: 中国队突破了历史,获得了世界杯冠军! - r3
: ibm 收购 sun公司,java开始收费!
急需(面向对象)设计模式之观察者模式的简单C++程序!!!
windows的安全模式如何实现?
我需要实现工作组模式的步骤~~
现代厨房设计的基本模式
关于activex控件设计模式的问题
ASP设计模式参考书
j2ee设计模式与java设计模式一样吗
用c++实现串模式匹配的原代码
谁能帮我找下实现工作组模式的文档
我的机器现在不能实现缩略图查看模式了!
VS2005设计视图模式问题
什么叫行为模式,一个咖啡厅的设计,行为模式是怎样的啊?
采用B/S 模式的<商业进销存系统基础信息模块的设计实现>l论文需要写些什么进去呢?
究竟是谁设计的人生的模式啊?
基于 struts 的MVC设计模式的web应用程序开发
企业CIS设计的标准模式是怎样的?
企业行为模式系统设计的内容和程序是什么?
金融Order management System数据库模式设计的问题
保护模式下的分页机制是否需要客户程序实现,还是cpu自动实现?
为什么我的电脑在安全模式下可以实现正常上网,而在正常模式下却不能
CS1.5如何实现死亡模式
劲舞团窗口模式?如何实现?
怎么用EJB来实现MVC 模式?
在设计需要印刷的彩页时,使用ps是不是要先用cmyk模式设计啊?