帮我用Java实现一下观察者模式吧
时间: 2023-05-23 20:02:07 浏览: 53
观察者模式是一种行为型设计模式, 它允许一个对象被其他对象观察. 当被观察的对象更改时, 会通知所有观察者对象.
在Java中, 可以使用java.util.Observable类和java.util.Observer接口来实现观察者模式.
以下是一个示例:
```java
import java.util.Observable;
import java.util.Observer;
public class Example {
public static void main(String[] args) {
// 创建被观察的对象
ObservableValue observableValue = new ObservableValue(0);
// 创建观察者
Observer observer = new ValueObserver();
// 添加观察者
observableValue.addObserver(observer);
// 更改被观察对象的值
observableValue.setValue(1);
}
}
// 被观察的对象
class ObservableValue extends Observable {
private int value;
public ObservableValue(int value) {
this.value = value;
}
public void setValue(int value) {
this.value = value;
// 通知观察者
setChanged();
notifyObservers();
}
public int getValue() {
return value;
}
}
// 观察者
class ValueObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
if (o instanceof ObservableValue) {
ObservableValue observableValue = (ObservableValue) o;
System.out.println("Value changed: " + observableValue.getValue());
}
}
}
```
上面的代码中,`ObservableValue`类继承自`Observable`类,并实现了`setValue`方法来更改值,同时通知观察者。`ValueObserver`类实现了`Observer`接口,重写了`update`方法来处理被观察对象的更改。
在main函数里,创建了一个被观
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)