天天看点

观察者模式学习心得

前些日子看《Ajax实战》这本书,书中有个使用了观察者模式的例子,对于观察者模式看的是不甚了了。回家之后有翻看了《设计模式》,也是云里雾里的感觉,说不来的一种感觉。原理还是比较能理解的,就是当两个对象产生依赖时,比如A对象的数据更新了,需要B对象同时做出反映,这时在二者中间加入一个观察者,由这个观察者来对A、B对象进行连接,而不是让A、B对象自己完成连接。但是应用到《Ajax实战》书中的例子的时候,又觉得不是那么明白了。直到昨晚我下楼打食方才顿悟啊。

我家楼下有个家常菜,不大,20张桌子吧,外加一个包间。隔壁是个KTV。如果我要去饭馆吃饭,我一进门就表示我要吃饭,我的状态就改变了,相应的数据也随之改变。我自行的找了张桌子,喊过服务员点菜,而饭馆就是另外一个对象,完全是被动的,因为我的改变而改变,他既不会把提前知道我要吃饭,而直接把菜送到我家,也不会因为我进了饭馆,就能知道我要干什么。KTV则不然,我一进门,就有人带着我,问我要什么样的包厢,从而领着我过去,因为我自己根本无从得知哪个包厢是空的。不像饭馆一进去就能看见空桌子。好!KTV里的工作人员就是观察者,KTV的包厢就是一个类,而我是另外一个类,当我要消费时,KTV工作人员拿着我的需求(中包,10个人)去找对应的房间,找好后通知我。饭馆呢?完全可以让我自己找我喜欢的座位,当然很多大饭馆为了显档次增加了领位人员,相当于增加了一个观察者,我一进门就告诉他我的需求,他再按照我的要求找位子,但是必须注意,对于饭馆来说,领位人员绝对不是必须的,特别是哪些中档以下的。

回到最开始的话题,《Ajax实战》书中的例子不是特别好,用了一个无可无不可的例子。所以这个观察者模式完全是依赖程序的规模和复杂度的,其实任何一个模式也是如此。 

继续阅读