一、定义
定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
观察者模式又被称为发布-订阅模式(publish-subscribe)。
对于一个目标对象,其观察者可以是多个,当然也可以只有一个。
二、类图
Subject(目标接口)、ConcreteSubject(具体的目标)
1.一个目标对象可以被多个观察者观察
2.目标对象可以注册(register)和退订(remove)观察者
3.当目标的状态发生改变时,目标负责通知所有注册的、有效的观察者。
Observer(观察者)、ConcreteObserver(具体的观察者)
1.能够保存注册的观察者对象(具有一个容器)
2.提供注册和删除观察者的方法(注册观察者和删除观察者方法)
3.能够通知所有注册的观察者对象(提供一个通知方法)
三、实现
目标对象要维持一个观察者的列表,因为只有这样,当目标对象发生改变时,才能对注册的观察者进行通知。
四、JDK对观察者模式的支持
由于观察者模式应用的非常广泛,所以JDK提供了内置的支持。但是许多时候,自己建立这一切会更具有弹性(况且建立这一切并不是很麻烦)
推模式(push)和拉模式(pull)
……更多设计模式的内容,可以访问Refactoring.Guru