认识观察者模式:
命名建议:
第一:目标接口的定义,建议在名称后面加上Subject。
第二:观察者接口的定义,建议在名称后面跟上Observer。
第三:观察者接口的更新方法,建议名称为Update。
触发通知的时机:完成了状态维护后触发。
实现的两种方式:推模型和拉模型
推模型:
目标对象主动向观察者推送目标的详细信息,推送的信息通常是目标对象的全部或部分数据。
拉模型:
目标对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到目标对象中获取,
相当于是观察者从目标对象中拉数据。
一般这种模型的实现中,会把目标对象自身通过update方法传递给观察者(上一节例子就是该模式)。
如果要把上一节的拉模型改成推模型,只需要把update方法以及相关方法的观察者对象修改为weatherContent,
把所有的信息全部传给观察者调用,而不是观察者自己通过传入的目标对象获取。
两个模型比较:
推模型是假定目标对象知道观察者需要的数据。
拉模型是目标对象不知道观察者需要什么数据,因此把自身传给观察者,由观察者来取值。
推模型会使得观察者对象难以复用。
拉模型下:update方法的参数是目标对象本身,基本上可以适用各种情况的需要。