观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
主题和观察者定义了一对多的关系。只要主题状态一有改变,观察者就会被通知。
下面是观察者模式的类图:
这张图展现了观察者模式的具体实现。ConcreteSubject实现Subject,使用集合(Observer的集合)存储注册的ConcreteObserver,当状态改变时,通知每一个已注册的ConcreteSubject,即调用notifyObserver。ConcreteObserver实现Observer,通过registerObserver注册就可。若不需要ConcreteSubject的数据,可以实时调用removeObserver,从集合中移除,由此可知其应该有一个指向ConcreteSubject的变量。
Java有内置的观察模式,通过接口java.util.Observable和类java.util.Observer实现。
观察者模式应用及其广泛。在GUI的API中,大量使用观察者模式,如侦听事件就是使用观察者模式。著名的设计框架MVC(Model,View,Controller)在Model与View之间使用观察者模式…