如何实现简单的观察者模式
接下来我们实现壹個简单的被观察者类 ExampleObservable ,代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
import java.util.Observable;
public class ExampleObservable extends Observable {
int data = 0 ;
public void setData( int data){
this .data = data;
this .setChanged(); //标记此 Observable对象为已改变的对象
this .notifyObservers(); //通知所有的观察者
}
} |
再实现壹個观察者类 ExampleObserver,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.util.Observable;
import java.util.Observer;
public class ExampleObserver implements Observer {
//有被观察者发生变化,自动调用对应观察者的update方法
@Override
public void update(Observable object, Object argument) {
//通过强制类型转换获取被观察者对象
ExampleObservable example = (ExampleObservable)object;
System.out.println( "example.data changed, the new value of data is " + example.data);
}
} |
我们再写壹個简单的测试类来测试下它是否运行正确,代码如下:
1
2
3
4
5
6
7
8
9
10
|
public class Main {
public static void main(String[] args) {
ExampleObservable example = new ExampleObservable();
example.addObserver( new ExampleObserver()); //给example这个被观察者添加观察者,允许添加多個观察者
example.setData( 2 );
example.setData(- 5 );
example.setData( 9999 );
}
} |
运行之后在控制台输出如下结果:
1
2
3
|
example.data changed, the new value of data is 2
example.data changed, the new value of data is - 5
example.data changed, the new value of data is 9999
|
通过输出结果我们可以了解到,当 ExampleObservable 类的实例 example 的成员变量 data 的值发生改变时,ExampleObserver 对象都能够监测到,然后调用 update() 方法打印壹句话到控制台,说明以上的结果是符合我们预期的。
既是观察者又是被观察者
对于壹個类而言,可以既是观察者又是被观察者,只要既继承 Observable 类,又实现 Observer 接口就可以了。接下来给出壹個类似的例子。例子中 ObserverA 和 ObserverB 既是观察者又是被观察者,它们互相监听着对方的改变。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
//ObserverA.java import java.util.Observable;
import java.util.Observer;
public class ObserverA extends Observable implements Observer {
@Override
public void update(Observable object, Object arg) {
ObserverB observerB = (ObserverB)object;
System.out.println( "observerB changed, the new value of observerB.data is " + observerB.data);
this .setChanged();
this .notifyObservers();
}
} //ObserverB.java import java.util.Observable;
import java.util.Observer;
public class ObserverB extends Observable implements Observer {
int data = 0 ;
@Override
public void update(Observable object, Object arg) {
System.out.println( "ObserverB found that ObserverA changed..." );
}
public void setData( int data){
this .data = data;
this .setChanged();
this .notifyObservers();
}
} //Main.java import net.oschina.bairrfhoinn.multiply.ObserverA;
import net.oschina.bairrfhoinn.multiply.ObserverB;
public class Main {
public static void main(String[] args) {
ObserverA a = new ObserverA();
ObserverB b = new ObserverB();
a.addObserver(b);
b.addObserver(a);
b.setData( 2 );
}
} |
运行之后的结果为:
1
2
|
observerB changed, the new value of observerB.data is 2
ObserverB found that ObserverA changed... |
之所以会出现上述运行结果,最初 ObserverA 和 ObserverB 相互之间作为观察者与被观察者,但是 ObserverB 的实例 b 先调用的 setData() 方法,然后 ObserverA 的实例 a 观察到了这個变化,于是调用了本类的 update 方法打印出了第壹行,紧接着 ObserverA 的 update() 方法在方法体中声明了自己发生了变化,于是 ObserverB 观察了这個情况,也调用了自身的 update() 方法并打印了第二句话。
相关推荐
Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用
在Java中,观察者模式可以通过Java的内置接口`java.util.Observer`和`java.util.Observable`来实现。`Observer`接口代表观察者,而`Observable`类代表被观察的对象,也称为主题(Subject)。下面将详细介绍这两个...
本文将深入探讨Java内置的观察者模式,包括其原理、实现方式以及实际应用。 ### 观察者模式的核心概念 1. **主题(Subject)**:被观察的对象,也就是发出通知的一方。在Java中,通常通过实现`java.util....
在Java中,标准的观察者模式实现是通过`java.util.Observable`类和`java.util.Observer`接口来完成的,但本示例特别指出未使用这两个内置工具类,而是完全自定义实现了观察者模式。 观察者模式的主要组件包括: 1. ...
在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 ### `...
在Java中,观察者模式通常通过Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现。`Observable`类代表被观察的对象,它可以有多个观察者,而`Observer`接口则定义了观察者的通用行为。 首先,...
在Java中,观察者模式的实现通常基于Java的内置接口`java.util.Observer`和`java.util.Observable`。下面将详细解释观察者模式的概念、结构以及如何在Java中应用这个模式。 **观察者模式的核心概念:** 1. **主题...
在Java中,`java.util.Observable` 和 `java.util.Observer` 类是内置的支持观察者模式的类。`Observable` 类代表被观察的对象,而`Observer`接口则表示观察者。下面我们将详细探讨这两个类以及如何使用它们来实现...
观察者模式是一种软件设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时...在实际开发中,Java的`java.util.Observable`和`java.util.Observer`类提供了内置的支持,可以方便地实现观察者模式。
在Java中,观察者模式得到了内置支持,主要体现在`java.util.Observable`类和`java.util.Observer`接口中。下面我们将详细讨论这个模式以及如何使用Java内置的支持来实现它。 首先,我们要理解观察者模式的基本概念...
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
在Java中,可以使用内置的`java.util.Observable`类和`java.util.Observer`接口实现观察者模式。主题类继承`Observable`,并实现`setChanged()`、`notifyObservers()`等方法;观察者类实现`Observer`接口,重写`...
Java内置的观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这种模式在Java中通过`java.util.Observable`和`java.util....
在Java中,`java.util.Observable`和`java.util.Observer`类提供了观察者模式的内置支持。而在其他语言中,如C#、Python等,也可以轻松实现观察者模式,通过事件或委托机制。 总结来说,观察者模式是一种重要的设计...
在Java中,观察者模式可以通过Java的内置API `java.util.Observable` 和 `java.util.Observer` 类来实现。`Observable` 类代表被观察的对象,而 `Observer` 接口则表示观察者。以下是对这两个关键类的详细解释: 1....
在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。`Observable`类代表被观察的对象,而`Observer`接口则表示观察者。让我们详细解析这个实例: 1. **定义主题...
在Java中,`java.util.Observable`和`java.util.Observer`接口提供了内置的支持来实现观察者模式。开发者可以创建自己的类实现这两个接口,或者使用更现代的事件监听框架如JavaFX或Swing中的事件处理机制。 观察者...
在Java中,`java.util.Observable` 和 `java.util.Observer` 是内置支持观察者模式的类。 标题中的“java观察者模式Demo”指的是使用Java语言来演示观察者模式的应用。通常,这个Demo会包含一个可观察的对象...
4. **Java实现**:在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了观察者模式的标准实现。`Observable`类代表主题,`Observer`接口代表观察者。通过`addObserver()`添加观察者,`...
在Java中,观察者模式可以通过内置的java.util.Observable类和java.util.Observer接口来实现。`Observable`类代表被观察的对象,而`Observer`接口则表示观察者。接下来,我们将深入探讨如何使用这两个核心组件来构建...