由于博主最近一遍回顾基础,一遍学新的知识点,所以发表的博客文章不会是按照顺序的发表的,不过是分好类的。
一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建议哈!
初写博客不久,我是杨展浩。这是我的第十一篇博客。加油!!!
今天来分享下Java基础知识 - - > 观察者设计模式!!!学习使用Java文档提供的关于观察者设计模式的一个接口 Observer 和一个类 Observable 。
首先简单介绍下 观察者设计模式 的基本原理:该设计模式分两个角色,一个是观察者,一个是被观察者。
举个例子:2个狗狗(逗逗、毛球) 和 他们的铲屎官。当铲屎官拿着狗粮并且命令逗逗和毛球坐好的时候,此时观察者就是逗逗和毛球(死盯着铲屎官拿着的那盘狗粮),因此被观察对象就是狗粮。
原理大概就这样,下面上代码实验一波:
编写一个被观察者的类(这里定义狗粮为被观察者):
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;
}
}
编写一个观察者类(这里定义狗狗为观察者):
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);
}
}
}
测试类走起:
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 有个了解知道大概怎么用就行了。
观察者设计模式开发:被观察者与观察者之间需要进行关联关系,当被观察者发生变化时,会同步通知观察者的。
来源:oschina
链接:https://my.oschina.net/u/3901188/blog/3104417