什么是观察者模式?我们先打个比方,这就像你订报纸。比如你想知道美国最近发生了些什么新闻。你可能会订阅一份美国周刊 。然后美国一旦有了新的故事,美国周刊就发一刊,并邮寄给你。当你收到这份报刊,然后你就能够了解美国最新的动态。其实这就是观察者模式,A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了什么变化。这是一种非常典型的观察者的用法,我把这种使用方法叫做经典观察者模式。当然与之相对的还有另外一种观察者模式----广义观察者模式
从经典的角度看,观察者模式是一种通知变化的模式,一般认为只在对象发生变化感兴趣的场合有用,主题对象知道有观察者存在,设置会维护观察者的一个队列:而从广义的角度看,观察者模式,需要查看对象属性时就会使用的一种模式。主题对象不知道观察者的存在,更像是围观者,需要知道主题对象的状态,所以即使在主题对象没有发生改变的时候,观察者也可能会去访问主题对象。换句话说广义观察者模式,是在不同的对象之间传递数据的一种模式。
观察者模式应当是面向对象编程中被大规模使用的设计模式之一,从方法论的角度来说,传统的认知论认为,世界是由对象组成的,我们通过不停的观察和了解就能够对象的本质。整个人类认知模式就是建立在“观察”这种之上的我们通过不停的与其他对象交互,并通过观察其他实例的变化做出响应,以完成功能。这也就是,为什么会把观察者模式单独提出来,做一个专一的剖析的原因----在我看来他是很多其他设计模式的基础模式,并且是编程中及其重要的一种设计模式