标签:
什么是观察者模式?打个比方,就像你订报纸,比如你想知道美国最近发生了哪些新闻,你可能会订阅一份美国周刊,然后美国一旦有了新的故事,美国周刊就发一刊,并邮寄给你,当你收到这份报刊,然后你就能了解美国的最新动态。其实这就是观察者模式,A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生可变化。这是一种非常典型的观察者的用法,我把这种方法叫做经典观察者模式。当然与之相对的还有另外一种观察者模式------广义观察者模式。
从经典的角度看,观察者模式是一种通知变化的模式,一般认为只在对象发生变化感兴趣的场合有用。主题对象知道有观察者存在,设置会维护观察者的一个队列,而从广义的角度看,观察者模式是中传递变化数据的模式,需要查看对象属性时就会使用的一种模式,主题对象不知道观察者的存在,更像是围观者。需要知道主题对象的状态,所以即使在主题对象没有发生改变的时候,观察者也可能回去访问主题对象。换句话说广义观察者模式,是在不同对象之间传递数据的一种模式。
观察者模式应当是面向对象编程中被大规模使用的设计模式之一,从方法的角度出发,传统的认知论认为,世界是由对象组成的,我们通过不停的观察和了解就能够了解对象的本质。整个人类的认知规模型就是建立在“观察”这种行为之上的。我们通过不停与世界中的其他对象交互,并观察之来了解这个世界。同样,在程序的世界中,我们构建的每一个实例,也是通过观察其他实例的变化来并作出响应,以来完成功能。这也就是,为什么把观察者模式单独提出来,做一个专门剖析的原因---在我看来他是很多其他设计模式的基础模式,并且是编程中极其重要的一种设计模式。
经典观察者模式
经典观察者模式被认为是对象的行为模式,又叫发布订阅(Publish/Subscribe)模式,模型-视图(Model、View)模式,源-监听器(Source/Listener)模式或者从属者模式。经典观察者模式定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己活着做出相应的一些动作。在文章一开始举得例子就是典型的观察者模式的应用。
标签:
原文地址:http://www.cnblogs.com/victor-wang/p/5622526.html