--- 观察者模式 --- #### 目录 1. 思维导图 2. 概述 3. 常见实现例子 4. 具体实现 5. 参考 #### 思维导图 #### 概述 观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。它的最重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小。 #### 常见实现例子 1. 常见的发布订阅模式 2. ListView 的 Adapter 的 notifyDataSetChanged 3. BroadcastReceiver 4. EventBus 5. RxJava #### 具体实现 首先定义一个观察者的接口: ```java public interface Observer { void onUpdate(); } ``` 然后具体的观察者实现: ```java public class Observer1 implements Observer { @Override public void onUpdate() { System.out.println("Observer1 收到通知!"); } } ``` ```java public class Observer2 implements Observer { @Override public void onUpdate() { System.out.println("Observer2 收到通知!"); } } ``` 在创建一个被观察者对象接口: ```java public interface Subject { /** * 添加观察者 */ void add(Observer observer); /** * 删除观察者 */ void delete(Observer observer); /** * 通知所有观察者 */ void notifyAllObservers(); /** * 自身的操作 */ void operation(); } ``` 抽象主题: ```java public abstract class AbstractSubject implements Subject { private Vector vector = new Vector<>(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void delete(Observer observer) { vector.remove(observer); } @Override public void notifyAllObservers() { Enumeration enumeration = vector.elements(); while (enumeration.hasMoreElements()) { enumeration.nextElement().onUpdate(); } } } ``` 具体的观察者对象: ```java public class MySubject extends AbstractSubject { @Override public void operation() { System.out.println("执行更新!"); notifyAllObservers(); } } ``` 测试: ```java public class ObserverTest { public static void main(String[] args) { MySubject mySubject = new MySubject(); mySubject.add(new Observer1()); mySubject.add(new Observer2()); mySubject.operation(); } } ``` #### 参考 [Observer(观察者模式)](https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/design_patterns/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-Observer.md)