目录
1.介绍观测者模式
2.jdk自带的观测者模式实现
3.自己实现一个观测者模式
一、介绍建观测模式
观测者模式是一种比较重要的设计模式,观测者模式也叫发布/订阅模式。它在angular、vue、等前端框架中的使用是非常频繁的。观测者模式本身是一种mv模型,它能时时的更新我们的数据,观测者模式本身提供一种异步操作。
二、jdk自带的观测者模式实现
在jdk中有自带的类来实现观测者模式,在jdk1.9之后这个类宣布过时了,因为这个模式的实现相对简单。
jdk中自带的观测者模式使用入下:
1.创建一个能被观测的对象:
这个对象需要继承Observable来声明是一个能被观测的对象
package observer; import java.util.Observable; /** * 能被观测的对象 * @author HYSong * */ public class Data extends Observable{ int data; /** * @param data 要设置的 data */ public void setData(int data) { this.data = data; //改变状态 setChanged(); //通知观测者 notifyObservers(data); } }
2.创建一个观测者的对象
这个对象需要实现Observer接口来声明一个观测者,并重写update方法
package observer; import java.util.Observable; import java.util.Observer; /** * 观测者 * @author HYSong * */ public class View implements Observer{ @Override public void update(Observable o, Object arg) { display((int)arg); } void display(int arg) { System.out.println("Data:"+arg); } }
如果一个被观测对象绑定了多个观测者的话,那么当改变了一个事件时,会被推送到多个观测者上,所有观测者的update方法都将被执行。
如果一个观测者观测了多个被观测者的话,我们可以判断类型这个对象的类型是否为观测者的对象类型。这样就可以区分是来自哪个推送者的消息。
package observer; import java.util.Observable; import java.util.Observer; /** * 观测者 * @author HYSong * */ public class View implements Observer{ @Override public void update(Observable o, Object arg) { if(o instanceof Data) { display((int)arg); } } void display(int arg) { System.out.println("Data:"+arg); } }