当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
普通数据类
/*** @author meikb* @desc 存储数据类 一个数据改变 通知其他数据* @date 2020-05-26 10:48*/public class DataObj implements Observer{public int getNum() {return num;}public void setNum(int num) {this.num = num;}private int num;public DataObj(int num){this.num = num;}@Overridepublic void change(DataCenter dataCenter) {System.out.println("我想要减1,大家都一起减1");dataCenter.notifyObserver();}@Overridepublic void updateSelf() {num = this.num - 1;}}
观察者类
/*** @author meikb* @desc* @date 2020-05-26 10:45*/public interface Observer {public abstract void change(DataCenter dataCenter); //负责发现数据变化public abstract void updateSelf(); //更新数据}
数据服务中心
/*** @author meikb* @desc* @date 2020-05-26 10:48*/public class DataCenter {private List<Observer> observers = new ArrayList<>();public void notifyObserver(){observers.forEach(observer -> {observer.updateSelf();});}public void addData(Observer observer){observers.add(observer);}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();observers.forEach(observer -> {DataObj dataObj = (DataObj)observer;sb.append(dataObj.getNum());});return sb.toString();}}
测试主函数
/*** @author meikb* @desc* @date 2020-05-26 11:02*/public class ObserverMain {public static void main(String[] args) {DataCenter center = new DataCenter();DataObj dataObj1 = new DataObj(1);center.addData(dataObj1);DataObj dataObj2 = new DataObj(2);center.addData(dataObj2);DataObj dataObj3 = new DataObj(3);center.addData(dataObj3);dataObj1.change(center);System.out.println(center);}}
