`

Java Observer(观察者)与Observable(被观察者-->实体)实现观察者模式

    博客分类:
  • java
阅读更多
在Java中通过Observable类和Observer接口实现了观察者模式Observer对象是观察者,Observable对象是被观察者。

1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)


当被观察事件发生时,执行:
setChanged();
notifyObservers();

setChange()方法用来设置一个内部标志位注明数据发生了变化;
notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。

[4]对于观察者类,实现Observer接口的唯一方法update

void update(Observable o, Object arg)


形参Object arg,对应一个由notifyObservers(Object arg);
传递来的参数,当执行的是notifyObservers();时,arg为null。

实例
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
package com.zj.observer;
import java.util.Observable;
 
public class NumObservable extends Observable {
    private int data = 0;
 
    public int getData() {
       return data;
    }
 
    public void setData(int i) {
       data = i;
       setChanged();
       notifyObservers();
    }
}


NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行update()方法。

package com.zj.observer;
import java.util.Observable;
import java.util.Observer;
 
public class NumObserver implements Observer{
    public void update(Observable o, Object arg) {
       NumObservable myObserable=(NumObservable) o;
       System.out.println("Data has changed to " +myObserable.getData());
    }
}


测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
package com.zj.observer;
 
public class SingleTest {
    public static void main(String[] args) {
       NumObservable number = new NumObservable();
       number.addObserver(new NumObserver());
       number.setData(1);
       number.setData(2);
       number.setData(3);
    }
}


结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3

转自:http://zhangjunhd.blog.51cto.com/113473/68949/




分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java实现观察者模式-Java内置的观察者模式(基于Observable和Observer)

    Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用

    java观察者模式demo----未使用java工具类

    观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer

    java观察者模式介绍

    Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时, 所有依赖于它的对象(观察者)都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java....

    观察者模式相关

    这样一来 当一个对象改变状态时 依赖它的对象都会收到通知并自动跟新 Java已经提供了对观察者Observer模式的默认实现 Java对观察者模式的支持主要体现在Observable类和Observer接口 ">观察者 Observer 模式定义:在...

    Java观察者设计模式(Observable和Observer)

    主要介绍了 Java观察者设计模式(Observable和Observer)的相关资料,需要的朋友可以参考下

    observable-observer

    观察者模式介绍:Observable和Observer原理分析,手动实现简单MyObservable和MyObserver

    观察者模式类文件

    观察者模式主要有观察者和被观察者2个对象,在该模式中,Observable表示被观察者,这个对象是一个抽象类,只能被继承。 Observer表示观察者,他是一个接口,所以观察者可以有多个,实现了该接口的类都是属于观察者。

    观察者模式示例代码 android studio kotlin代码 基于java.uitl.*

    android 观察者模式示例代码 android studio kotlin代码 基于java.uitl.*

    Java实现MVC球体

    Java实现一个模型、两个视图和两个控制器的功能软件,即采用MVC模式或者说是观察者模式,本程序通过输入球体半径,显示球体形状,面积体积等 Sphere.java package Model; import java.util.Observable; public class...

    C++实现观察者模式

    要通知到需要了解该变化的类,Windows编程中经常用到的是发消息,要是没有Windows的消息机制的话,自己做一套消息机制倒是可以,但也是徒增了工作量,再次想到了设计模式中的观察者模式,也可以实现这个想法,具体...

    react-observer:ES7 的 Observable 与 React 组件

    React观察者响应 React 组件中的事件。 让 React 真正具有React性。 这个现在对人来说都是相当特定的 - 理想情况下它应该支持 ES7 observable 接口,但这是有效的。 请参阅的讨论。去做 测试 可运行的例子 包含...

    RxJava 操作符使用

    三要素Rxjava原理 基于 一种扩展的观察者模式的响应式编程框架RxJava原理可总结为:被观察者 (Observable) 通过 订阅(Subscribe) 按顺序发送事件 给观察者 (Observer), 观察者(Observer) 按顺序接收事件 & ...

    Android设计模式之观察者模式源码

    观察者模式(Observer Pattern) - 定义对象间的一种一个(Observable)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的对象都得到通知并被自动更新。

    simple-observer:具有ES6代理的简单观察者

    简单观察者 具有ES6代理的简单观察者 安装 $ npm install simple-observer 用法 const { observable , observe , unobserve , isObservable } = require ( 'simple-observer' ) ; // Can't observe for Set/Map/...

    observer:观察者数据结构

    观察者观察者数据结构来自 Addy Osmani 的《学习 JavaScript 设计模式》 Subject / Observable 数据结构的示例实现。

    java餐饮管理系统源码6-design-patterns:设计模式

    观察者模式定义了对象之间一对多的依赖, 这样一来, 当一个对象改变状态 所有依赖都会收到通知, 自动更新 :beer_mug:设计原则1: 为了交互对象之间的松耦合设计而努力 :star:实现细节 自己设计的Observer/Subject: 见 ...

    EventBus消息总线

    EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 ...

    designPattern

    设计模式 策略模式 基础 抽象 封装 继承 多态 设计原则 ...java.util 包内包含最基本的 Observer 接口与 Observable 类,可自由使用 push / pull 问题 不要依赖于观察者被通知的次序 Observable 是一个类

    object-observer:通过本机ProxyJavaScript对象数组的对象观察器功能

    观察者的路径可以根据observer配置进行过滤;原始对象在变为Observable被克隆数组详细信息: 支持通用的类对象突变支持的固有Array变异方法: pop , push , shift , unshift , reverse , sort , fill , ...

    Head.First设计模式_PDF.part1

    使用Java内建的观察者模式 java.util.Observable的黑暗面 设计箱内的工具 习题解答 …… 3 装饰者模式:装饰对象 4 工厂模式:烘烤OO的精华 5 单件模式:独一无二的对象 6 命令模式:封装调用 7 ...

Global site tag (gtag.js) - Google Analytics