观察者模式java代码
时间: 2023-07-28 07:08:01 浏览: 48
下面是观察者模式的 Java 代码示例:
```
import java.util.ArrayList;
import java.util.List;
// 主题接口
interface Subject {
// 注册观察者
void registerObserver(Observer observer);
// 移除观察者
void removeObserver(Observer observer);
// 通知观察者
void notifyObservers();
}
// 观察者接口
interface Observer {
// 接收通知
void update(String message);
}
// 具体主题
class ConcreteSubject implements Subject {
// 观察者列表
private List<Observer> observers = new ArrayList<>();
// 状态
private String state;
// 设置状态
public void setState(String state) {
this.state = state;
// 状态改变时通知观察者
notifyObservers();
}
@Override
public void registerObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(state);
}
}
}
// 具体观察者
class ConcreteObserver implements Observer {
// 名称
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " 收到消息:" + message);
}
}
// 测试类
public class ObserverPatternDemo {
public static void main(String[] args) {
// 创建具体主题
ConcreteSubject subject = new ConcreteSubject();
// 创建具体观察者
ConcreteObserver observer1 = new ConcreteObserver("Observer1");
ConcreteObserver observer2 = new ConcreteObserver("Observer2");
ConcreteObserver observer3 = new ConcreteObserver("Observer3");
// 注册观察者
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.registerObserver(observer3);
// 设置状态,观察者将收到通知
subject.setState("Hello World!");
}
}
```
在这个例子中,`ConcreteSubject` 是具体主题,`ConcreteObserver` 是具体观察者。`Subject` 是主题接口,定义了注册、移除、通知观察者等方法。`Observer` 是观察者接口,定义了接收通知的方法。当主题的状态改变时,它会通知所有的观察者。在测试类中,我们创建了具体主题和具体观察者,并注册观察者到主题中,然后设置状态,观察者将收到通知。