`

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观察者模式观察者模式

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 ### `...

    设计模式--观察者模式java例子

    在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...

    Java内置观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的其他对象。在Java中,这种模式已经被内置到语言核心,使得开发者可以轻松地实现事件驱动...

    设计模式之观察者模式Java实现

    在Java中,观察者模式通常通过Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...

    java 设计模式 观察者模式 简单实例 包括测试test类

    在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...

    java实现观察者模式

    在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....

    java 了解观察者模式

    在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util.Observer`这两个接口。下面我们将详细探讨观察者模式的概念、工作原理以及如何在Java中实现它。 观察者模式的核心概念是“观察者”和“被...

    观察者模式java实现观察者设计模式

    1. 创建一个可观察的对象类,实现`Observable`接口(如果使用Java的内置机制,或者自定义一个类来存储观察者列表)。 2. 实现观察者类,这个类会实现`Observer`接口或直接使用Java的`EventListener`接口,根据具体的...

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    设计模式-观察者模式(讲解及其实现代码)

    在Java中,`java.util.Observable`和`java.util.Observer`类提供了观察者模式的内置支持。而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计...

    设计模式实现——观察者模式

    4. **Java实现**:在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了观察者模式的标准实现。`Observable`类代表主题,`Observer`接口代表观察者。通过`addObserver()`添加观察者,`...

    观察者模式Observer

    在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。开发者可以创建自己的类实现这两个接口,或者使用更现代的事件监听框架如JavaFX或Swing中的事件处理机制。 观察者...

    Java观察者模式代码全解析

    Java标准库提供了`java.util.Observable`和`java.util.Observer`接口,用于实现观察者模式。 首先,我们需要创建一个`Observable`类的子类,代表我们的主题。这个类需要维护一个观察者列表,并提供添加、删除观察者...

    设计模式-观察者

    在Java中,`java.util.Observable` 和 `java.util.Observer` 类为实现观察者模式提供了基础支持。 1. **主题(Subject)**:主题是被观察的对象,它可以是抽象的或具体的。主题维护了一个观察者列表,并提供了添加...

    观察者模式代码(JAVA)

    在Java中,`java.util.Observable` 和 `java.util.Observer` 类是内置的支持观察者模式的类。`Observable` 类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将详细探讨这两个类以及如何使用它们来实现...

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

    在Java中,标准的观察者模式实现是通过`java.util.Observable`类和`java.util.Observer`接口来完成的,但本示例特别指出未使用这两个内置工具类,而是完全自定义实现了观察者模式。 观察者模式的主要组件包括: 1. ...

    java观察者模式Demo

    在Java中,`java.util.Observable` 和 `java.util.Observer` 是内置支持观察者模式的类。 标题中的“java观察者模式Demo”指的是使用Java语言来演示观察者模式的应用。通常,这个Demo会包含一个可观察的对象...

    java观察者模式实例

    总结来说,这个"java观察者模式实例"帮助我们理解如何在实际项目中应用观察者模式,以及如何利用Java的`Observable`和`Observer`接口来实现。通过这个实例,我们可以更好地掌握Java的继承和多态特性,提升软件设计的...

Global site tag (gtag.js) - Google Analytics