观察者模式
观察者模式也叫发布订阅模式。
定义
定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且被自动更新。
实现
Subject
定义被观察者必须实现的职责,必须能够动态的增加、取消观察者。
它一般是抽象类或者实现类,仅仅完成作为被观察者必须实现的职责,管理观察者并通知观察者。
1 | public abstract class Subject{ |
ConcreteSubject
具体的被观察者,定义被观察者自己的业务,同时定义对哪些事件进行通知。
1 | public class ConcreteSubject extends Subject{ |
Observer
观察者接收到消息后,对接收到的信息进行处理。
1 | public interface Observer{ |
ConcreteObserver
具体的观察者,不同的观察者在处理消息的时候的具体定义。
1 | public class ConcreteObserver implements Observer{ |
Use
1 | ConcreteSubject subject = new ConcreteSubject(); |
应用
优点
- 观察者和被观察之间是抽象耦合
如论增加观察者还是被观察者都非常容易扩展 - 建立了一套规则的触发机制
缺点
效率缺陷,考虑采用异步方式通知。
广播链的问题 A -> B -> C
扩展
Java中的观察者
java 提供了java.util.Observer接口 和 java.util.Observable 类。
被观察者继承java.util.Observable, 观察者实现java.util.Observer.
但是在生产环境中考虑到性能一般不会用这种方式来实现。
生产中的观察者
一般使用MQ来异步处理
本地的如Disruptor