1、认识观察者模式
观察者模式,用来处理对象间一对多的依赖关系,即当一个对象发生变化,依赖对象组(list)都会得知该变化并做进一步处理。
设计实现上包含四个角色 :
(1)抽象主题,或称抽象通知者,用来管理观察者对象,主要包含,增、删、通知操作。
(2)抽象观察者,用来定义观察者得到通知后做的一系列处理。
(3)具体主题 ,实现抽象主题
(4)具体观察者,实现抽象观察者
2、代码demo
假设一个场景 : 班主任来了,课代表通知 : 小明不要玩手机,小红不要睡觉..
//抽象主题/抽象通知者,用来管理观察者
public interface Subject {
//增加观察者
void addObs(Observer observer);
//移除观察者
void removeObs(Observer observer);
//通知观察者
void notifyObs();
}
//观察者,主要做:观察到变化更新自己
interface Observer {
//得到通知做出响应
void update();
}
class ConcreteSubject implements Subject {
private Vector<Observer> observerList = new Vector<>();
@Override
public void addObs(Observer observer) {
observerList.add(observer);
}
@Override
public void removeObs(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyObs() {
for (Observer o:observerList){
o.update();
}
}
}
class ConcreteObserver2 implements Observer {
@Override
public void update() {
System.out.println("小红得到通知了。不睡觉。。");
}
}
class ConcreteObserver1 implements Observer {
@Override
public void update() {
System.out.println("小明得到通知了。不玩手机。。");
}
}
//测试
class Test{
public static void main(String[] args) {
ConcreteSubject concreteSubject = new ConcreteSubject();
concreteSubject.addObs(new ConcreteObserver1());
concreteSubject.addObs(new ConcreteObserver2());
concreteSubject.notifyObs();
}
}
3、留意点
- 主题可以有很多个,去各自实现抽象主题。