[关键字]:java,design pattern,设计模式,《Java与模式》学习,阎宏,Ph.D,Factory,观察者模式,observer,event,java自定义事件,java事件机制,事件模型,事件监听,订阅发布,事件消息
[环境]:StarUML5.0 + JDK6
[作者]:天堂露珠 (wintys@gmail.com) http://www.blogjava.net/wintys/
[正文]:
ObserverTest.java:
package pattern.observer;
import java.util.Observer;
import java.util.Observable;
/**
* 观察者(Observer)模式:
* 使用Java类库支持的观察者模式
* java.util.Observer
* java.util.Observable
运行结果:
Prievious:,Changed:abc
Prievious:abc,Changed:abcd
Prievious:abcd,Changed:f
* @version 2009-5-6
* @author Winty(wintys@gmail.com)
*/
public class ObserverTest{
public static void main(String[] args){
Watched watched = new Watched();
Watcher watcher = new Watcher();
watched.addObserver(watcher);
watched.changeData("abc");
watched.changeData("abcd");
watched.changeData("abcd");
watched.changeData("f");
watched.changeData(null);
watched.changeData(null);
}
}
/**
*具体被观察者,Observable是抽象被观察者
*/
class Watched extends Observable{
private String data;
public Watched(){
data = "";
}
public String retrieveData(){
return data;
}
public void changeData(String data){
if(data!=null && !this.data.equals(data)){
String dt = this.data;//记录变化前的数据
this.data = data;
setChanged();
notifyObservers(dt);
}
}
}
/**
*具体观察者,抽象观察者为Observer
*/
class Watcher implements Observer{
@Override
public void update(Observable o , Object arg){
Watched wathed = (Watched)o;
String previousData = (String)arg;
System.out.print("Prievious:" + previousData + ",");
System.out.println("Changed:" + wathed.retrieveData());
}
}
[附件]:
ObserverTest.java、Observer.java、Observable.java
原创作品,转载请注明出处。
作者:Winty (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
分享到:
相关推荐
* 观察者模式应用场景实例 * * 免责声明:本文只是以哈票网举例,示例中并未涉及哈票网任何业务代码,全部原创,如有雷同,纯属巧合。 * * 场景描述: * 哈票以购票为核心业务(此模式不限于该业务),但围绕购票...
观察者模式也叫 发布者-订阅者模式,发布者发布事件,订阅者监听事件并做出反应 在传统的前端解耦方面,观察者模式作为比较常见一种设计模式,大量使用在各种框架类库的设计当中。 核心代码: // eventProxy.js '...
观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象。 它是由两类对象组成,主题和观察者,主题负责发布事件...
// 如果先订阅,则直接订阅后发布// 如果先发布后订阅,则把发布的事件类型与参数保存起来,等到有订阅后执行订阅小结:发布订阅模式可以使代码解耦,满足开放封闭原
观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的...
本文实例讲述了JavaScript观察者模式(publish/subscribe)原理与实现方法。分享给大家供大家参考,具体如下: 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这...
主要介绍了原生javascript实现类似vue的数据绑定功能,结合实例形式分析了JavaScript基于观察者模式实现类似vue的数据绑定相关操作技巧,需要的朋友可以参考下
原生js观察者模式的的实现,主要用来管理回调函数队列,参考jquery的callbacks模块
工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: "推"的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新 消息...
5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—...
观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...
2观察者模式让你的对象知悉现况 3装饰者模式装饰对象 4工厂模式烘烤OO的精华 5单件模式独一无二的对象 6命令模式封装调用 7适配器模式与外观模式随遇模式 8模板方法模式封装算法 9选...
5.7 observer(观察者)—对象行为型 模式 194 5.8 state(状态)—对象行为型模式 201 5.9 strategy(策略)—对象行为型 模式 208 5.10 template method(模板方法) —类行为型模式 214 5.11 visitor...
26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 ...
些实例是一个模仿百度百科词条系统功能的项目,包括:标准三层...运用到的具体GOF有工厂、观察者、单一、算法封装等设计模式。 虽然页面层不完善,但底层架构基本铺设完成,有精细的注释讲解,对.net新手有决对性的帮助.
26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 ...
java原生Cucumber影视源码 设计模式学习 设计原则 1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 ...观察者模式:通过加入新的观察者,我们可以在任何时候扩