观察者模式
问题描述:
观察者模式
问题解决:
观察者模式-----定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-收听者(Source/Listener)模式或从属者(Dependents)模式。
结构图:
什么时候使用观察者模式:
1、当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时,应该考虑使用观察者模式。
2、观察者模式所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体,使得各自的变化都不会影响另一边的变化。
具体实现:
(1)Subject抽象类
注:
发布消息类,包含了添加、删除订阅者、发布消息,通知所有的订阅者
(2)具体的发布消息的类实现
注:
包含一个观察者容器,可以添加和删除观察者,实现一个notifyall接口,通知订阅的观察者
(3)观察者公有接口
注:
观察者,接收订阅者通知,更新自己的信息
(4)具体观察者实现
注:
观察者对象,需要包含发布者对象,更新时更具发布者发送的信息,更新状态信息
注:
另一个观察者对象。
具体源代码:
观察者:
发布者:




![clipboard[1] clipboard[1]](http://images0.cnblogs.com/blog/440499/201307/19203608-02e38bd9bc434bc2a7b2cfb9491fa984.png)
![clipboard[2] clipboard[2]](http://images0.cnblogs.com/blog/440499/201307/19203609-14b33e8e47f94d01b41b346c1cef8329.png)
![clipboard[3] clipboard[3]](http://images0.cnblogs.com/blog/440499/201307/19203609-456932ff0f36469fa5560933a8229ed3.png)
![clipboard[4] clipboard[4]](http://images0.cnblogs.com/blog/440499/201307/19203610-f3d087585be1402989e9165b7d02e177.png)
![clipboard[5] clipboard[5]](http://images0.cnblogs.com/blog/440499/201307/19203611-b672d3a82ff54944a1065a5e56d541cc.png)
![clipboard[6] clipboard[6]](http://images0.cnblogs.com/blog/440499/201307/19203612-222ad22f88f1461ca6b362c1e9713ae2.png)

![attachment[1] attachment[1]](http://images0.cnblogs.com/blog/440499/201307/19203615-b7360f08556540d49d57317c34ed3ea0.png)
![attachment[2] attachment[2]](http://images0.cnblogs.com/blog/440499/201307/19203616-509d70e280134c1185ffbf4b14620520.png)
![attachment[3] attachment[3]](http://images0.cnblogs.com/blog/440499/201307/19203616-39b5b116807e42a1bd1d3abdeb53e5e6.png)
![attachment[4] attachment[4]](http://images0.cnblogs.com/blog/440499/201307/19203618-854866abb3e847768be4ca6cb04c9ec5.png)
![attachment[5] attachment[5]](http://images0.cnblogs.com/blog/440499/201307/19203619-3fca1def72a04e2580d154cffb0a8e21.png)
浙公网安备 33010602011771号