`

[原]观察者模式

    博客分类:
  • Java
阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,阎宏,Ph.D,Factory,观察者模式,observer,event,java自定义事件,java事件机制,事件模型,事件监听,订阅发布,事件消息
[环境]:StarUML5.0 + JDK6
[作者]:天堂露珠 (wintys@gmail.com) http://www.blogjava.net/wintys/

[正文]:

Overview of observer     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
分享到:
评论

相关推荐

    php观察者模式应用场景实例详解

    * 观察者模式应用场景实例 * * 免责声明:本文只是以哈票网举例,示例中并未涉及哈票网任何业务代码,全部原创,如有雷同,纯属巧合。 * * 场景描述: * 哈票以购票为核心业务(此模式不限于该业务),但围绕购票...

    原生js实现的观察者和订阅者模式简单示例

    观察者模式也叫 发布者-订阅者模式,发布者发布事件,订阅者监听事件并做出反应 在传统的前端解耦方面,观察者模式作为比较常见一种设计模式,大量使用在各种框架类库的设计当中。 核心代码: // eventProxy.js '...

    JavaScript原生实现观察者模式的示例

    观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象。 它是由两类对象组成,主题和观察者,主题负责发布事件...

    sunzhaoye#blog#观察者模式1

    // 如果先订阅,则直接订阅后发布// 如果先发布后订阅,则把发布的事件类型与参数保存起来,等到有订阅后执行订阅小结:发布订阅模式可以使代码解耦,满足开放封闭原

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    观察者模式 状态模式 导入模式 迭代器模式 命令模式 职责链模式 进来者模式 访问者模式 数据结构 Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的...

    JavaScript观察者模式(publish/subscribe)原理与实现方法

    本文实例讲述了JavaScript观察者模式(publish/subscribe)原理与实现方法。分享给大家供大家参考,具体如下: 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这...

    原生javascript实现类似vue的数据绑定功能示例【观察者模式】

    主要介绍了原生javascript实现类似vue的数据绑定功能,结合实例形式分析了JavaScript基于观察者模式实现类似vue的数据绑定相关操作技巧,需要的朋友可以参考下

    callbacksjs原生js发布订阅模式的实现参考jquery的callbacks模块

    原生js观察者模式的的实现,主要用来管理回调函数队列,参考jquery的callbacks模块

    java设计模式选择题复习题.doc

    工厂模式定义一个创建对象的接口,让子类决定实例化哪一个类 5观察者模式的推拉有什么不同?适用场景 现在要说的分歧在这里: "推"的方式是指,Subject维护一份观察者的列表,每当有更新发生,Subject会把更新 消息...

    设计模式可复用面向对象软件的基础.zip

    5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    Head First(Design Patterns) 设计模式英文原版

     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...

    UML和模式应用(架构师必备).part02.rar

    26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 ...

    一个拥有三层架构,asp.Net,设计模式的词条实例

    些实例是一个模仿百度百科词条系统功能的项目,包括:标准三层...运用到的具体GOF有工厂、观察者、单一、算法封装等设计模式。 虽然页面层不完善,但底层架构基本铺设完成,有精细的注释讲解,对.net新手有决对性的帮助.

    UML和模式应用(架构师必备).part06.rar

    26.10 观察者/发布-订阅/委派事件模型(GoF) 26.11 结论 26.12 参考资料 第五部分 细化迭代3—中级主题 第27章 迭代3:中级主题 27.1 NextGen POS案例 27.2 Monopoly案例 第28章 UML活动图及其建模 28.1 ...

    java原生黄瓜影视源码-study-design-patterns:设计模式学习

    java原生Cucumber影视源码 设计模式学习 设计原则 1. 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 ...观察者模式:通过加入新的观察者,我们可以在任何时候扩

Global site tag (gtag.js) - Google Analytics