jdk观察者模式

    技术2022-07-10  179

    学习springboot源码,其中大量使用的观察者模式有点难懂,所以学习一下jdk实现的观察者模式,帮助学习springboot源码。 jdk观察者模式 1.观察者接口 public interface Observer{ //目标观察者改变时通知观察者更新 void update(Observable o, Object arg); } 2.观察目标类 Observable{ } 在观察目标发生改变时调用setChanged()方法,改变属性change为true, 然后通知所有观察者。 3.自己实现观察者接口 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 + "收到目标对象改变的通知,目标观察者数量="+o.countObservers()); }

    } 4.继承目标对象 public class MyObservable extends Observable { //观察目标初始状态 private int data = 5;

    public int getData() { return data; } public void setData(int data) { if(this.data < data){ setChanged(); } notifyObservers(); }

    } 5.测试 public class MyTest { public static void main(String[] args) { MyObservable observable = new MyObservable(); MyObserver observer1 = new MyObserver(“a”); MyObserver observer2 = new MyObserver(“b”); observable.addObserver(observer1); observable.addObserver(observer2); System.out.println(“1.目标初始值=”+observable.getData()); System.out.println(“2.改变目标值>5,看观察者是否触发更新”); observable.setData(6); System.out.println(“3.给目标设置值<5,看观察者是否触发更新”); observable.setData(4); } } 6.结果 1.目标初始值=5 2.改变目标值>5,看观察者是否触发更新! 观察者b收到目标对象改变的通知,目标观察者数量=2 观察者a收到目标对象改变的通知,目标观察者数量=2 3.给目标设置值<5,看观察者是否触发更新

    Processed: 0.034, SQL: 9