模式的秘密-观察者模式(二)

认识观察者模式:

命名建议:

第一:目标接口的定义,建议在名称后面加上Subject。

第二:观察者接口的定义,建议在名称后面跟上Observer。

第三:观察者接口的更新方法,建议名称为Update。

 

触发通知的时机:完成了状态维护后触发。

 

 

实现的两种方式:推模型和拉模型

推模型:

目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据。

拉模型:

目标对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到目标对象中获取,

相当于是观察者从目标对象中拉数据。

一般这种模型的实现中,会把目标对象自身通过update方法传递给观察者(上一节例子就是该模式)

 

如果要把上一节的拉模型改成推模型,只需要把update方法以及相关方法的观察者对象修改为weatherContent,

把所有的信息全部传给观察者调用,而不是观察者自己通过传入的目标对象获取。

 

两个模型比较:

推模型是假定目标对象知道观察者需要的数据。

拉模型是目标对象不知道观察者需要什么数据,因此把自身传给观察者,由观察者来取值。

 

推模型会使得观察者对象难以复用。

拉模型下:update方法的参数是目标对象本身,基本上可以适用各种情况的需要。

 

posted @ 2018-04-25 21:25  美好的明天  阅读(196)  评论(0编辑  收藏  举报