今天看了看观察者模式,有点小小的体会,从以下3点说明之 :
1.看一下经典的观察者模式图
2.讲个故事,说一下逻辑
有一个男人(Subject),他通过一定的手段(attach)拥有了3个女人(Observer):老婆(concreteObserver1),情人(concreteObserver2),小3(concreteObserver3).这3个女人都不知情,但是都想知道男人的月收入情况。而月收入需要通过工资卡(concreteSubject)来体现。所以,每当发工资(setState)时,男人就会群发短信(Notify)告知3个女人可以去查钱了,那么,这3个女人查询(getState)到工资卡里的钱,就想各自的挥霍方式去了。
3.观察者模式适用性
当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。
当一个对象必须通知其他对象,而它又不能假定其他对象时谁。
Push Model:Subject 向 Observer 发送关于改变的详细信息,而不管它们是否需要。
Pull Model:Subject 除最小通知外什么也不推送,由 Observer 显式地向 Subject 询问细节。