介绍
在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知
访问者模式由两部分组成,观察者和被观察者。当被被观察者执行了被检测行为时,观察者就会发送通知。对于被观察者,可以将观察与业务分割开,观察的一些行为,例如增加观察者,删除观察者,通知观察者等行为是通用的,可以交由抽象类进行处理,具体的观察者实现类进行实现业务。同样观察者也可以抽象出一个接口,来约束处理观察的方法命名。
模板
类图
代码
观察者
package cn.zjm404.stu.dp.behavior.observer;/*** 观察者*/public interface Observer {public void update();}
package cn.zjm404.stu.dp.behavior.observer;public class ConcreteObserver implements Observer{@Overridepublic void update() {System.out.println("被观察者进行了修改...开始更新依赖值...");}}
被观察者
package cn.zjm404.stu.dp.behavior.observer;import java.util.Vector;/*** 观察者抽象类*/public abstract class Subject {/*** 存储观察者*/private Vector<Observer> observers = new Vector<>();public void addObserver(Observer _observer){observers.add(_observer);}public void delObserver(Observer _observer){observers.remove(_observer);}public void notifyObservers(){for (Observer observer : observers) {observer.update();}}}
package cn.zjm404.stu.dp.behavior.observer;/*** 进行业务*/public class ConcreteSubject extends Subject{public void doSomething(){super.notifyObservers();}}
测试
package cn.zjm404.stu.dp.behavior.observer;public class Client {public static void main(String[] args) {ConcreteSubject cs = new ConcreteSubject();Observer obs = new ConcreteObserver();cs.addObserver(obs);cs.doSomething();}}
