官方定义:定义对象之间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
认识观察者模式:
1、目标与观察者之间的关系:目标与观察者之间是一对多的关系。
2、单向依赖:只有目标知道什么时候通知观察者。
3、命名模式:又称为发布-订阅模式,目标接口定义后面跟subject,观察者接口定义后面跟observer,观察者接口的更新方法建议为update,方法的参数是根据需要定义的。
4、触发通知的时机:先改变后通知。
观察者实现的两种方式:
1、推模型:目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据。
2、拉模型:目标对象在通知的时候只传递少量信息,如果观察者需要更具体的信息,由观察者主动到目标对象获取,相当于是观察者主动在目标对象中拉数据。
两种模式的比较:
1、推模型是假定目标对象知道观察者所需要的数据,而拉模型是目标对象具体需要什么数据,直接把自生传递给观察者,由观察者来取值,推模型会使观察者对象难以复用;
2、拉模型下,update方法的参数是对象本身,基本可以适应各种情况的需要。
观察者的优点:
1、观察者模式实现了观察者和目标之间的抽象耦合。
2、观察者模式实现了动态联动。
3、观察者模式支持广播通信。
观察者的缺点:
1、可能会引起无畏的操作。
观察者模式衍生:
如果观察者有个性化的设置,则需要在通知的时候区别对待。