观察者模式
- 用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。发生改变的对象称为观察目标,而被通知的对象称为观察者。
- 定义:定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式别名包括“发布-订阅”模式,“模型-视图”模式,“源-监听器”模式或从属者模式。
观察者模式结构
![观察者模式结构](https://img-blog.csdn.net/20180122195130589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd19idV9uZW5nX2t1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- Subject(目标):定义了一个观察者集合,提供一系列方法来增加和删除观察者对象,同时定义通知方法。目标类可以是接口也可以是抽象类或具体类。
- ConcreteSubject(具体目标):当它的状态发生改变时,向它的所有订阅者发出通知。
- Observer(观察者):一般定义为接口,该接口声明了更新数据的方法,又称抽象观察者。
- ConcreteObserver(具体观察者):维护一个具体目标的引用,保持和具体目标的状态一致。
abstract class Subject {
protected ArrayList observers<Observer> = new ArrayList<>();
public void attach(Observer obs) {
observers.add(obs);
}
public void detach(Observer obs) {
observers.remove(obs);
}
public abstract void notify();
}
class ConcreteSubject extends Subject {
public void notify() {
for (Object obj : observers) {
((Observer)obj).update();
}
}
}
interface Observer {
public void update();
}
class ConcreteObserver implements Observer {
public void update() {
}
}
Java中的观察者模式
观察者模式与MVC
- 模型(Model)
- 视图(View)
- 控制器(Controller)