设计模式之——观察者模式(Observer)

来源:互联网 发布:淘宝网开店要求 编辑:程序博客网 时间:2024/05/23 02:04

观察者:在对象之间定义一对多的依赖,这样当一个对象的状态改变时,其它所有依赖它的对象都能收到通知,并自动更新

观察者模式是用得非常多的一种设计模式,看看Windows里面的消息机制,回调函数就知道了。用一句话概括就是你不用来找我,我会找你。一个主题可以有很多观察者,只要让主题知道就行了,然后当主题有变化的时候,他就会通知所有的观察者,并把数据发送给他们,那样不同的观察者就可以对同一份数据进行处理,但得到不同的结果。这样做的好处就是可以很灵活的扩展我们程序,如果我们需要增加一个不同的功能,只要增加一个观察者就可以了,不用对主题做任何修改,也不会影响其他已经存在的功能。当然也可以动态的删除观察者。其类图结构为

利用观察者模式,我们实现了针对接口编程,只要知道Observer的接口就行了,具体究竟是什么类型的观察者对主题来说是透明的。对于观察者模式来说,数据的传送有两种方式,就push 和 poll,前一种比较常见,即主题主动发送数据给观察者,这样可以不暴露任何数据接口;poll的方式是当主题数据变化时通知观察者,但不发送数据,而是提供接口由具体的观察者主动来取,这样的好处是每个观察者只要取自己需要的数据就可以了,同时也避免了所有数据封装的问题(因为随着主题数据的变化,肯能会得不到很好的封装)。

PS:这里有一个问题需要注意的是,Observer里面要保存一个Subject的指针,一般是在其构造函数里面传进去的,这样观察者就可以随时到主题注册,或从主题删除,而主题的代码不用作任何修改。






原创粉丝点击