java观察者模式的三种实现方式代码实例
更新时间:2023年10月25日 09:03:30 作者:葡萄晓虎
这篇文章主要介绍了java观察者模式的三种实现方式代码实例,观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,需要的朋友可以参考下
java观察者模式的三种实现方式
Java中可以使用观察者模式开发,有三种简单的方式可以实现。
自定义接口实现
观察者
public interface Observer {
public void update(Object o);
}
观察者的实现
public class ObserverImpl implements Observer{
private Object str;
@Override
public void update(Object o) {
this.str = o;
System.out.println(this.str);
}
}
观察者的注入和方法调用
@Autowired
private List<Observer> observers;
@GetMapping("impl/{str}")
public void impl(@PathVariable("str") String str){
for (Observer observer : observers){
observer.update(str);
}
}
基于spring的事件
先定义spring事件
public class CustEvent extends ApplicationEvent {
public String msg;
public CustEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
}
事件监听器
@Component
public class CustEventListener {
@EventListener()
public void eventListen(ApplicationEvent applicationEvent){
if(applicationEvent instanceof CustEvent){
CustEvent custEvent = (CustEvent)applicationEvent;
System.out.println(custEvent.msg);
}
}
}
发布事件
@GetMapping("event/{str}")
public void event(@PathVariable("str") String str){
context.publishEvent(new CustEvent(this,str));
}
基于Java原生接口
实现java.util.Observer
public class JavaObserverA implements Observer {
private int myState;
@Override
public void update(Observable o, Object arg) {
myState = ((JavaConcreteSubject)o).getState();
System.out.println(myState);
}
}
继承Observable类,注意发布时要调用父类的setChanged()和notifyObservers()方法
public class JavaConcreteSubject extends Observable {
private int state;
public void set(int s){
state = s; //目标对象的状态发生了改变
setChanged(); //表示目标对象已经做了更改
notifyObservers(state); //通知所有的观察者
}
public int getState() {
return state;
}
}
注册观察者,然后发布事件
private JavaConcreteSubject subject = new JavaConcreteSubject();
public testController(){
subject.addObserver(new JavaObserverA());
}
@GetMapping("util/{str}")
public void util(@PathVariable("str") String str){
subject.set(1);
}
到此这篇关于java观察者模式的三种实现方式代码实例的文章就介绍到这了,更多相关java观察者模式实现方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
easycode配置成mybatis-plus模板的实现方法
本文主要介绍了easycode配置成mybatis-plus模板的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-09-09
Springboot 整合 Java DL4J 实现时尚穿搭推荐系统(实例代码)
本文介绍了如何使用SpringBoot和JavaDeeplearning4j框架搭建一个时尚穿搭推荐系统,文章详细阐述了系统的技术架构、数据集格式、Maven依赖配置、模型训练和预测代码实现,以及单元测试和预期输出结果2024-10-10
解决MybatisPlus批量插入数据报错:Error getting generated 
在使用MybatisPlus进行批量插入数据时遇到空指针异常错误,分析原因是由于主键生成策略导致的,尝试通过设置useGeneratedKeys属性解决问题,但因批量插入方法限制,该方法未能成功,最终通过自定义mapper方法实现批量插入,解决了问题2024-09-09


最新评论