java观察者模式 例子
时间: 2023-05-18 08:06:32 浏览: 68
一个简单的 Java 观察者模式的例子如下:
首先,定义一个主题接口 Subject,包含注册观察者、移除观察者和通知观察者的方法:
```
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
```
然后,定义一个观察者接口 Observer,包含更新方法:
```
public interface Observer {
void update(String message);
}
```
接下来,实现具体的主题类 ConcreteSubject,继承自 Subject 接口,包含一个观察者列表和一个状态:
```
public class ConcreteSubject implements Subject {
private List<Observer> observers;
private String state;
public ConcreteSubject() {
observers = new ArrayList<>();
}
@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);
}
}
public void setState(String state) {
this.state = state;
notifyObservers();
}
}
```
最后,实现具体的观察者类 ConcreteObserver,继承自 Observer 接口,实现更新方法:
```
public class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received message: " + message);
}
}
```
使用示例:
```
ConcreteSubject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver("Observer 1");
Observer observer2 = new ConcreteObserver("Observer 2");
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setState("Hello World!");
subject.removeObserver(observer1);
subject.setState("Goodbye World!");
```
输出结果:
```
Observer 1 received message: Hello World!
Observer 2 received message: Hello World!
Observer 2 received message: Goodbye World!
```