文档地址:《设计模式之禅》
切入故事: 韩非子身边的卧底是谁派来的
定义: Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.(定义对象间一种一对多的依赖关系, 使得每当一个对象改变状态, 则所有依赖于它的对象都会得到通知并被自动更新。 )
通用类图:
● Subject被观察者
定义被观察者必须实现的职责, 它必须能够动态地增加、 取消观察者。 它一般是抽象类或者是实现类, 仅仅完成作为被观察者必须实现的职责: 管理观察者并通知观察者。
● Observer观察者
观察者接收到消息后, 即进行update(更新方法) 操作, 对接收到的信息进行处理。
● ConcreteSubject具体的被观察者
定义被观察者自己的业务逻辑, 同时定义对哪些事件进行通知。
● ConcreteObserver具体的观察者
每个观察在接收到消息后的处理反应是不同, 各个观察者有自己的处理逻辑。
优点:
● 观察者和被观察者之间是抽象耦合
● 建立一套触发机制
缺点:
开发效率和运行效率问题
使用场景:
● 关联行为场景。 需要注意的是, 关联行为是可拆分的, 而不是“组合”关系。
● 事件多级触发场景。
● 跨系统的消息交换场景, 如消息队列的处理机制。
扩展:
EJB中的 MessageDriven Bean(一般简称为MDB) , 消息驱动Bean 消息的发布者(Provider) 发布一个消息, 也就是一个消息驱动Bean, 通过EJB容器(一般是Message Queue消息队列) 通知订阅者做出回应