定义:定义了一组对象之间的一对多依赖,这样一来,当一个对象状态改变时,他的所有依赖者都会收到通知并自动更新。
简略图如下:
主题和观察者之间是一种松耦合设计:主题只知道观察者实现了某个接口(Observer),而不知道观察者的具体情况。主题只维持一个对象列表,这个列表保存了所有已经注册的观察者,当有变化发生时只需要通知所有注册的观察者即可。当有新的观察者时,只需要实现观察者接口,并在列表中注册。
设计原则:为了交互对象之间的松耦合设计而努力。
Java内置了观察者模式,在java.util包内
java.util.Observer 观察者(接口)
java.util.Observable 被观察者(类)
由于被观察者是一个类,我们只能继承它的方法,至于它通知观察者的顺序我们就不清楚了,这里违反了一个设计原则。
设计原则:多用组合,少用继承。
JDK中实现了观察者模式的有:Swing 、Java Beans。