描述
定义:也叫发布订阅模式。定义对象间一种一对多的依赖关系,是的每当一个对象(被观察者)改变状态,则所有依赖于它的对象(观察者)都会得到通知并被自动更新
角色:被观察者(Observee)、观察者(Observer)、具体观察者(ConcreteObserver)
类图
代码
优势
观察者与被观察者抽象耦合,利于扩展,且Java以提供相关API(java.util.Observer、java.util.Observable)
符合单一职责原则,能够形成触发链,实现触发机制
劣势
多个观察者时开发和调试比较复杂
通知默认按照顺序执行,如果一个观察者被阻塞会导致整体阻塞
场景
消息队列
说明
广播链问题(如数据库触发器链):如果一个对象既是观察者又是被观察者,会形成链导致逻辑复杂、可维护性差;推荐最多一个对象有两个角色,也就是消息最多被转发一次;广播链的消息结构由相邻两个节点确定,在传播过程中可以改变,而责任链模式消息传递过程中基本不变,如果改变也是对原有消息进行修正
异步处理问题:多个观察者对被观察者做出响应时间比较长时,使用异步(考虑线程安全和队列问题),如EJB
应用
实践
待续