Android设计模式:观察者模式

观察者模式:观察者模式又被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
(1)抽象主题(Subject):它把所有观察者对象的引用保存到一个集合中,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以注册和移除观察者。
(2)具体主题(ConcreteSubject):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。
(3)抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。
(4)具体观察者(ConcreteObserver):实现抽象观察者提供的更新接口,以便本身的状态能够及时更新。

具体观察者MyObserver实现:

public class MyObserver implements Observer {
    private String name;

    public MyObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("观察者" + name + "---->" + arg.toString());
    }
}

具体主题类ObserverManager实现:

public class ObserverManager extends Observable {
    private static ObserverManager observerManager;
    private List list = new ArrayList<>();

    public static ObserverManager getInstance() {
        if (null == observerManager) {
            synchronized (ObserverManager.class) {
                if (null == observerManager) {
                    observerManager = new ObserverManager();
                }
            }
        }
        return observerManager;
    }

    @Override
    public synchronized void addObserver(Observer o) {
        super.addObserver(o);
        list.add(o);
    }

    @Override
    public synchronized void deleteObserver(Observer o) {
        super.deleteObserver(o);
        if (list.contains(o)) {
            list.remove(o);
        }
    }

    @Override
    public void notifyObservers(Object arg) {
        super.notifyObservers(arg);
        for (Observer observer : list) {
            observer.update(null, arg);
        }
    }
}

调用实现

        MyObserver myObserver = new MyObserver("张三");
        ObserverManager.getInstance().addObserver(myObserver);
        ObserverManager.getInstance().notifyObservers("观察者请刷新信息");

你可能感兴趣的:(Android设计模式:观察者模式)