-
Subject 被观察者
- Collection<Observer> 观察者集合
- Attach 和 Detach 动态地增加、取消观察者
- Notify 遍历集合通知观察者
ConcreteSubject
定义被观察者逻辑,和那些事件进行通知-
Observer 观察者
- update 更新
ConcreteObserver
定义更新逻辑
subject = new ConcreteSubject();
observer = new ConcreteObserver();
subject.add(observer);
总结
优点
- 观察者和被观察者之间是抽象(接口或抽象类)耦合
- java提供了Observable实现类和Observer接口
缺点
- 消息遍历通知如果采用同步方法,一旦一个观察者阻塞会影响整体效率,一般考虑采用异步方式,比如消息队列、多线程;同步架构的话可以考虑缓存技术快速响应。
- 避免在一条链路上出现多个转发角色(同时作为观察者和被观察者),责任链是消息在传输过程中基本保持透传,观察者模式可会对原消息加工。
- 尽量由被观察者subject决定是否要通知,而不是让观察者决定是否要消费通知。