定义
定义对象间一种一对多的依赖关系, 使得每当一个对象发生改变时,所有的依赖于它的对象都会得到通知并且自动更新。
组成
抽象主题(Subject)
抽象主题角色把所有的观察者对象的引用保存在一个列表中,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以加上或者撤销观察者对象。可以使用一个抽象类或者一个接口来实现,在具体情况下可以使用具体类实现
抽象观察者(Observer)
为所有的具体观察者定义一个接口,在得到通知时通知更新自己。可以使用一个抽象类或者一个接口来实现,在具体情况下可以使用具体类实现
具体主题(ConcreteSubject)
具体主题保存对具体对象观察者对象有用的内部状态,在这种内部状态改变时,给其观察者发送一个通知。- 具体观察者(Concrete Observer)
具体观察者角色用于保存一个指向具体主题对象的引用,和一个与主题的状态相符的状态。具体观察者角色实现抽象观察者角色所要求的更新自己的接口,以便于本身状状态与主题状态自洽。
案例
【商品价格问题】
需求:网上商店中的商品在名称、价格发生变化时,必须自动通知会员
解决思路:被观察者类继承Observable,使用父类的setChanged方法和notifyObservers方法,传递通知参数观察者类实现Observer中的update方法,用于接收被观察者发送过来的通知信息。使用时,为被观察者添加观察对象