ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## **模式的定义** 观察者模式主要用于1对N的通知。当一个对象的状态变化时,他需要及时告知一系列对象,令他们做出相应。 ## **代码实现** 1. 定义观察者接口 ``` public interface Observer { // 接到通知后的处理 void update(Subject subject); } ``` 2. 实现观察者方法 ``` public class ObserverImpl implements Observer { @Override public void update(Subject subject) { System.out.println("观察者修改数据:" + subject.getData()); } } ``` 3. 创建抽象的观察的主题 ``` public abstract class Subject { // 存储观察者的列表 private List<Observer> observers = new ArrayList<>(); // 注册观察者 public void registerObserver(Observer obs) { observers.add(obs); } // 删除观察者 public void removerObserver(Observer obs) { observers.remove(obs); } // 广播 public void broadcast() { for (Observer observer : observers) { observer.update(this); } } // 留给子类实现的抽象方法 public abstract Object getData(); } ``` 4. 创建具体的观察主题 ``` public class SubjectA extends Subject { private int state; public int getState() { return state; } public void setState(int state) { this.state = state; this.broadcast(); } @Override public Object getData() { return state; } } ``` 5. 客户端调用 ``` public static void main(String[] args) { // 实例化多个观察者 ObserverImpl obs1 = new ObserverImpl(); ObserverImpl obs2 = new ObserverImpl(); ObserverImpl obs3 = new ObserverImpl(); // 创建观察主题 SubjectA subject = new SubjectA(); // 注册观察者 subject.registerObserver(obs1); subject.registerObserver(obs2); subject.registerObserver(obs3); subject.setState(100); } ``` 执行结果 ``` 观察者修改数据:100 观察者修改数据:100 观察者修改数据:100 ```