Java 观察者模式实现:代码示例及详解
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
下面是一个用Java实现观察者模式的示例代码:
主题接口 Subject.java
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
具体主题类 ConcreteSubject.java
import java.util.ArrayList;
public class ConcreteSubject implements Subject {
private ArrayList<Observer> observers;
private int state;
public ConcreteSubject() {
observers = new ArrayList<Observer>();
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int index = observers.indexOf(o);
if (index >= 0) {
observers.remove(index);
}
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(state);
}
}
public void setState(int state) {
this.state = state;
notifyObservers();
}
}
观察者接口 Observer.java
public interface Observer {
public void update(int state);
}
具体观察者类 ConcreteObserver.java
public class ConcreteObserver implements Observer {
private int observerState;
public void update(int state) {
observerState = state;
System.out.println('Observer state updated to ' + observerState);
}
}
测试代码 Test.java
public class Test {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver();
ConcreteObserver observer2 = new ConcreteObserver();
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setState(1);
subject.removeObserver(observer1);
subject.setState(2);
}
}
输出结果:
Observer state updated to 1
Observer state updated to 1
Observer state updated to 2
在这个示例中,ConcreteSubject是具体主题类,实现了Subject接口,并提供了注册、删除和通知观察者的方法。ConcreteObserver是具体观察者类,实现了Observer接口,并在update方法中更新自己的状态。Test类是测试类,创建了一个主题对象和两个观察者对象,并测试了注册、删除和通知观察者的过程。
原文地址: https://www.cveoy.top/t/topic/lLf2 著作权归作者所有。请勿转载和采集!