因为博主最近一遍回顾基础,一遍学新的知识点,因此发表的博客文章不会是按照顺序的发表的,不过是分好类的。java
一块儿学习,一块儿进步。继续沉淀,慢慢强大。但愿这文章对您有帮助。如有写的很差的地方,欢迎评论给建议哈!设计模式
初写博客不久,我是杨展浩。这是个人第十一篇博客。加油!!!ide
今天来分享下Java基础知识 - - > 观察者设计模式!!!学习使用Java文档提供的关于观察者设计模式的一个接口 Observer 和一个类 Observable 。学习
首先简单介绍下 观察者设计模式 的基本原理:该设计模式分两个角色,一个是观察者,一个是被观察者。测试
举个例子:2个狗狗(逗逗、毛球) 和 他们的铲屎官。当铲屎官拿着狗粮而且命令逗逗和毛球坐好的时候,此时观察者就是逗逗和毛球(死盯着铲屎官拿着的那盘狗粮),所以被观察对象就是狗粮。this
原理大概就这样,下面上代码实验一波:spa
编写一个被观察者的类(这里定义狗粮为被观察者):设计
package com.java8090.Watcher; import java.util.Observable; /** * @author zhanhao * @create 2019-09-10 14:11 */ public class DogFood extends Observable { private Integer amount; public DogFood (Integer amount){ System.out.println("狗粮初始化数量:" + amount); this.amount = amount; } public void setAmount(Integer amount){ if(amount > this.amount){ System.out.println("狗粮数量发生变化:" + amount); // 表示狗粮的量发生了变化 super.setChanged(); // 同步通知关注狗粮的观察者们 super.notifyObservers(amount); } this.amount = amount; } }
编写一个观察者类(这里定义狗狗为观察者):code
package com.java8090.Watcher; import java.util.Observable; import java.util.Observer; /** * @author zhanhao * @create 2019-09-10 14:14 */ public class DogFoodObserver implements Observer { private String name; public DogFoodObserver(String name){ this.name = name; } @Override public void update(Observable o, Object arg) { if(o instanceof DogFood){ DogFood dogFood = (DogFood) o; Integer dogFoodAmount = (Integer) arg; System.out.println("被关注的狗粮:" + dogFood + " 的量发生了变化:" + dogFoodAmount); } } }
测试类走起:server
package com.java8090.Watcher; /** * @author zhanhao * @create 2019-09-10 14:09 */ public class WatcherTest { public static void main(String[] args){ // 定义被观察的对象 - -> 狗粮 DogFood dogFood = new DogFood(0); // 定义观察者对象 - -> 关注狗粮的观察者 DogFoodObserver dfo1 = new DogFoodObserver("关注狗粮的狗1号"); DogFoodObserver dfo2 = new DogFoodObserver("关注狗粮的狗2号"); DogFoodObserver dfo3 = new DogFoodObserver("关注狗粮的狗3号"); // 将被观察者与观察者作关联 dogFood.addObserver(dfo1); dogFood.addObserver(dfo2); dogFood.addObserver(dfo3); // 当狗粮的量发生变化的时候,就会去通知全部观察者 dogFood.setAmount(100); } }
执行结果:
总结下:对Java提供的一个接口 Observer 和 一个类 Observable 有个了解知道大概怎么用就好了。
观察者设计模式开发:被观察者与观察者之间须要进行关联关系,当被观察者发生变化时,会同步通知观察者的。