观察者模式

被观察者

所有被观察者都继承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();
    }

观察者模式的注意事项

  1. 需要注意效率问题
  2. 由于消息通知是顺序执行的, 如有需要, 可采用异步方式
  3. 消息不能无限制的传递下去, 一般而言, 在一个观察者模式中最多出现一个对象既是被观察者又是观察者. 否则程序的维护性会变得很差.
posted @ 2016-11-26 13:59  ivyxjc  阅读(114)  评论(0编辑  收藏  举报