分为四部分:抽象主题角色,具体主题角色,抽象观察者角色,具体观察者角色
主题角色中具有观察者对象列表,当主题状态改变时,可以通知所有观察者角色。观察者之间不知道相互间的存在。
使用场景:当一个对象改变时,需要改变其他对象的场景中运用。
抽象主题角色:
public interface Subject {
public void addObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObservers();
}
具体主题角色:
public class Boss implements Subject {
private List<Observer> list = new ArrayList<Observer>();
@Override
public void addObserver(Observer observer) {
list.add(observer);
}
@Override
public void removeObserver(Observer observer) {
list.remove(observer);
}
@Override
public void notifyObservers() {
for(Observer observer:list){
observer.update();
}
}
}
抽象观察者角色:
public interface Observer {
public void update();
}
具体观察者角色:
public class ObserverA implements Observer {
@Override
public void update() {
System.out.println("员工A关掉视频");
}
}
public class ObserverB implements Observer {
@Override
public void update() {
System.out.println("员工B关掉股票");
}
}
测试:
public class Test {
public static void main(String[] args){
Boss boss = new Boss();
Observer observerA= new ObserverA();
Observer observerB= new ObserverB();
boss.addObserver(observerA);
boss.addObserver(observerB);
boss.notifyObservers();
}
}
结果:
员工A关掉视频
员工B关掉股票