介绍
GoF 23种设计模式之一。
定义
定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
举例
观察者接口
interface Observer {
public void update();
}
具体观察者1
class ConcreteObserver1 implements Observer {
public void update() {
System.out.println("观察者1收到信息,并进行处理。");
}
}
具体观察者2
class ConcreteObserver2 implements Observer {
public void update() {
System.out.println("观察者2收到信息,并进行处理。");
}
}
观察目标
abstract class Subject {
private List<Observer> obs = new ArrayList<Observer>();
public void addObserver(Observer obs){
this.obs.add(obs);
}
public void delObserver(Observer obs){
this.obs.remove(obs);
}
protected void notifyObserver(){
for(Observer o: obs){
o.update();
}
}
public abstract void doSomething();
}
具体观察目标
class ConcreteSubject extends Subject {
public void doSomething(){
System.out.println("被观察者事件发生");
this.notifyObserver();
}
}
测试
public class ObserverDemo {
public static void main(String[] args){
Subject sub = new ConcreteSubject();
sub.addObserver(new ConcreteObserver1()); //添加观察者1
sub.addObserver(new ConcreteObserver2()); //添加观察者2
sub.doSomething();
}
}
执行结果
适用场景
- 一个对象状态更新,其他对象需要同步更新;
- 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。