观察者模式
被观察者
所有被观察者都继承Observable接口 ( java标准库中Observable
是一个抽象类)
interface Observable{
public void addObserver(Observer observer);
public void deleteObserver(Observer observer);
public void notifyObserver(String context);
}
class AA implements Observable,IHanFeiZi_3{
//存放observer
private ArrayList<Observer> observerList=new ArrayList<Observer>();
@Override
public void addObserver(Observer observer) {
observerList.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
this.observerList.remove(observer);
}
@Override
public void notifyObserver(String context) {
for(Observer observer:observerList){
observer.update(context);
}
}
@Override
public void method1() {
...
}
@Override
public void method2() {
...
}
}
观察者
所有的观察者都继承Observer接口
interface Observer{
public void update(String str);
}
class BB implements Observer{
@Override
public void update(String context) {
...
}
}
场景
public static void main(String[] args){
Observer a1=new AA_1();
Observer a2=new AA_2();
Observer a3=new AA_1();
BB bb=new BB();
bb.addObserver(a1);
bb.addObserver(a2);
bb.addObserver(a3);
bb.method1();
}
观察者模式的注意事项
- 需要注意效率问题
- 由于消息通知是顺序执行的, 如有需要, 可采用异步方式
- 消息不能无限制的传递下去, 一般而言, 在一个观察者模式中最多出现一个对象既是被观察者又是观察者. 否则程序的维护性会变得很差.