Clever Castle
307 words
2 minutes
观察者模式

观察者模式定义对象间一种一对多的依赖关系, 使得每当一个对象改变状态, 则所有依赖于它的对象都会得到通知并被自动更新

被观察者#

所有被观察者都继承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. 消息不能无限制的传递下去, 一般而言, 在一个观察者模式中最多出现一个对象既是被观察者又是观察者. 否则程序的维护性会变得很差.
观察者模式
https://blog.ivyxjc.com/posts/pattern-observer/
Author
ivyxjc
Published at
2016-11-18