java 观察者模式四Observable 和 Observer 实现
一 前言
再看一种实现观察者模式的方法,使用 Obsrvable 和 Observer, 在 JDK9 之后就不推荐了,可以作为一种了解看看。
首先了解,他只有两种角色,一个是目标,一个是观察者。
目标:也即被观察者,需要继承 Observable 类
观察者:需要实现 Observer 类
二 代码实现
目标类(也即被观察者类):
/**
* 被观察者即 目标 需要继承 Observable 类
*/
public class PeopleList extends Observable {
private List<String> peopleList =null;//人员列表
private static PeopleList instance=null;//类唯一实例
private PeopleList(){};//构建方法私有化
//取唯一实例
public static PeopleList getInstance(){
if (instance==null){
instance=new PeopleList();
instance.peopleList=new ArrayList<>();
}
return instance;
}
/**
* 增加观察者对象(人员池接口)
* observer观察者
*/
public void addPeopleListObservable(Observer observer){
this.addObserver(observer);
}
/**
* 增加商品
* newProduct新产品
*/
public void addNewPeople(String newPeople){
peopleList.add(newPeople);
System.out.println("增加新人员");
this.setChanged();//设置被观察者(人员列表)发生变化
this.notifyObservers(newPeople);//通知人员接口(观察者)发生变化
}
}
观察者类,观察者可以有多个,这里举例两个:
/**
* 观察者需要实现java.util.Observer接口的update方法
*/
public class DepartmentAObserver implements Observer {
PeopleList peopleList=PeopleList.getInstance();
@Override
public void update(Observable o, Object product) {
String newProduct=(String)product;
System.out.println("增加新人员同步到部门A" product);
}
}
/**
* 观察者需要实现java.util.Observer接口的update方法
*/
public class DepartmentBObserver implements Observer {
PeopleList peopleList=PeopleList.getInstance();
@Override
public void update(Observable o, Object product) {
String newProduct=(String)product;
System.out.println("增加新人员同步到部门B" product);
}
}
功能代码都完成了,现在写测试代码:
public class ObserverTest {
public static void main(String[] args) {
PeopleList peopleList=PeopleList.getInstance();//获得被观察者唯一对象
DepartmentAObserver departmentAObserver=new DepartmentAObserver();
DepartmentBObserver departmentBObserver=new DepartmentBObserver();
peopleList.addObserver(departmentAObserver);//addObserver被观察者(产品列表)注册观察者
peopleList.addObserver(departmentBObserver);
peopleList.addNewPeople("新增人员");
}
}
运行测试类:
增加新人员
增加新人员同步到部门B新增人员
增加新人员同步到部门A新增人员
到这代码,完成了,需要重点看的是 目标类的写法。
三 总结
虽然不推荐使用了,但是可以作为了解看看,实现起来不是特别复杂。加上业务的话可能会繁琐,需要理解透彻
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkecc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13