一、动机
在软件构建过程中,我们需要为某些对象建立一种通知依赖关系,当一个对象的状态发生改变,所有的依赖对象都将得到通知,如果这样的依赖关系过于紧密,将使软件不能很好的抵御变化。
使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系,从而实现软件体系结构的松耦合
二、代码实现
public class ObserverPattern {
/**
* 观察者接口
*/
interface Observer{
boolean notifyOb();
}
/**
* 订阅观察的主题
*/
static class Subject{
private List<Observer> observerList = new ArrayList<>();
/**
* 添加观察者
* @param observer 观察者
*/
public void addObserver(Observer observer){
observerList.add(observer);
}
/**
* 删除观察者
* @param observer 观察者
*/
public void removeObserver(Observer observer){
observerList.remove(observer);
}
/**
* 通知观察者
*/
private void notifyOb(){
observerList.forEach(Observer::notifyOb);
}
}
public static void main(String[] args) {
Observer observer = () -> false;
Subject subject = new Subject();
subject.addObserver(observer);
//实际场景下时一般指subject内部判断到达某种条件下通知而不是外部
subject.notifyOb();
}
}
三、概念
定义对象间的一种一对多的关系,以便当一个对象(Subject)的状态发生变化时,所有依赖他的对象都得到通知并自动更新。