设计模式-观察者模式

 

 

 

Subject:抽象主题,定义增加,删除,以及通知观察者的方法
Observer:抽象观察者,定义接口,在被通知要更新时更新自己
 
ConcreteSubject:主题的实现,内部存在一个存放所有观察者引用的集合
ConcreteObserver:观察者的实现
 
核心就是 主题中保存着观察者的集合,当需要更新时,主题通知观察者做更新,常用的通知方式是直接调用观察者的方法

 

代码例子:

//subject 主题
interface Subject {
    public void addObserver(Observer observer);

    public void deleteObserver(Observer observer);

    public void notifyObserver();
}
//observer 观察者
interface Observer {
    public void update();
}
//ConcreteSubject 主题的具体实现
class ConcreteSubject implements Subject {
    //内部维护一个被通知者的集合
    List<Observer> observerList = new ArrayList<>();

    @Override
    public void addObserver(Observer observer) {
        observerList.add(observer);
    }

    @Override
    public void deleteObserver(Observer observer) {
        observerList.remove(observer);
    }

    @Override
    public void notifyObserver() {
        for (Observer observer : observerList) {
            observer.update();
        }
    }
}
//观察者实现
class ConcreteObserver implements Observer {
    private String name;

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

    @Override
    public void update() {
        System.out.println("接受到了name=" + name);
    }
}
//测试
public static void main(String[] args) {
    ConcreteSubject concreteSubject = new ConcreteSubject();

    ConcreteObserver obs1 = new ConcreteObserver("做了1件事情");
    ConcreteObserver obs2 = new ConcreteObserver("做了3件事情");
    concreteSubject.addObserver(obs1);
    concreteSubject.addObserver(obs2);

    concreteSubject.notifyObserver();

}
可以看到主题通知观察者更新是直接调用了观察者的方法实现

posted @ 2021-12-13 10:57  知识海洋中的浮萍  阅读(18)  评论(0编辑  收藏  举报