设计模式-观察者模式
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(); }
可以看到主题通知观察者更新是直接调用了观察者的方法实现