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观察者模式实现方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Cloud体系实现标签路由的方法示例

    Spring Cloud体系实现标签路由的方法示例

    这篇文章主要介绍了Spring Cloud体系实现标签路由的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Java编程思想对象的容纳实例详解

    Java编程思想对象的容纳实例详解

    这篇文章主要介绍了Java编程思想对象的容纳实例详解,内容比较详细,涵盖的东西也比较多,具有参考价值,需要的朋友了解下。
    2017-09-09
  • 详解利用SpringCloud搭建一个最简单的微服务框架

    详解利用SpringCloud搭建一个最简单的微服务框架

    这篇文章主要介绍了详解利用SpringCloud搭建一个最简单的微服务框架,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • CentOS安装solr 4.10.3详细教程

    CentOS安装solr 4.10.3详细教程

    这篇文章主要为大家详细介绍了CentOS安装solr 4.10.3的详细教程 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • SpringCloud基于Feign实现远程调用的问题小结

    SpringCloud基于Feign实现远程调用的问题小结

    这篇文章主要介绍了SpringCloud基于Feign远程调用,通过使用 Feign 的方式,我们可以更加优雅地进行多参数的远程调用,避免了手动拼接URL或构建复杂的请求体,需要的朋友可以参考下
    2024-02-02
  • 基于IOC容器实现管理mybatis过程解析

    基于IOC容器实现管理mybatis过程解析

    这篇文章主要介绍了基于IOC容器实现管理mybatis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • java语言如何生成plist下载ipa文件

    java语言如何生成plist下载ipa文件

    这篇文章主要介绍了java语言如何生成plist下载ipa文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 关于mybatis-plus-generator的简单使用示例详解

    关于mybatis-plus-generator的简单使用示例详解

    在springboot项目中集成mybatis-plus是很方便开发的,最近看了一下plus的文档,简单用一下它的代码生成器,接下来通过实例代码讲解关于mybatis-plus-generator的简单使用,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • springboot中实现通过后台创建临时表

    springboot中实现通过后台创建临时表

    这篇文章主要介绍了springboot中实现通过后台创建临时表操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springmvc九大组件之HandlerAdapter详解

    springmvc九大组件之HandlerAdapter详解

    这篇文章主要介绍了springmvc九大组件之HandlerAdapter详解,RequestMappingHandlerAdapter支持的handler的类型是HandlerMethod,而HandlerMethod是通过解析@RequestMapping注解获得的,需要的朋友可以参考下
    2023-11-11

最新评论