Java设计模式探究之观察者模式详解

 更新时间:2022年08月29日 09:04:18   作者:niuyongzhi  
这篇文章主要为大家详细介绍了JAVA的观察者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

1.观察者模式是什么

顾名思义,有两个对象,观察者和被观察者。当被观察者数据发生变化时,提醒观察者更新数据或状态。

2.如何实现

1)定义两个类,观察者和被观察者。

2)被观察者要维护一个集合,存放观察者对象。并且提供增删方法。

3)被观察者数据发生变化时,要调用观察者的方法,以便通知观察者更新数据或状态。

4)基于面向抽象原则,可以将观察者和被观察者中的方法提取接口中。

3.代码实现

1)观察者接口

/**
 * 抽象观察者接口
 */
public interface Observer {
    /**
     * 抽象方法
     */
    public void uPdate();
    public void remove();
}

2)被观察者接口

/**
 * 抽象被观察者
 */
public interface Observed {
    public void addObserver(Observer observer);
    public void deleteObserver(Observer observer);
    public void notifyObservers();
}

3)观察者实现

/**
 * 观察者实现
 */
public class ObserverImpl implements Observer {
    public ObserverImpl(){
    }
    @Override
    public void uPdate() {
        System.out.println("update....");
    }
}

4)被观察者实现

/**
 * 观察者实现
 */
public class ObserverImpl implements Observer {
    public ObserverImpl(){
    }
    private Observed observed;
    public ObserverImpl(Observed observed){
        this.observed = observed;
        observed.addObserver(this);
    }
    @Override
    public void uPdate() {
        System.out.println("观察者更新数据变化....");
    }
    @Override
    public void remove() {
        if(observed!=null){
            observed.deleteObserver(this);
        }
    }
}

5)测试类

public class TestObserver {
    public static void main(String args []){
        ObservedImpl subject = new ObservedImpl();
        ObserverImpl observer1 =  new ObserverImpl(subject);
        subject.notifyObservers();
    }
}

4.延伸拓展

在Android的代码中,有很多地方用到了观察者模式。

Android的广播机制,就是采用的观察者模式。

我们创建一个广播接收者,来接收系统广播。在Android源码中,其实就维护了一个接收者的集合,用于存放所有的广播接收者。

到此这篇关于Java设计模式探究之观察者模式详解的文章就介绍到这了,更多相关Java观察者模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Dubbo服务校验参数的解决方案

    Dubbo服务校验参数的解决方案

    这篇文章主要介绍了Dubbo服务如何优雅的校验参数,Dubbo框架本身是支持参数校验的,同时也是基于JSR303去实现的,今天通过示例代码介绍下详细实现过程,需要的朋友可以参考下
    2022-03-03
  • 深入了解Java atomic原子类的使用方法和原理

    深入了解Java atomic原子类的使用方法和原理

    这篇文章主要介绍了深入了解Java atomic原子类的使用方法和原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java解析XML文件开源库DOM4J

    Java解析XML文件开源库DOM4J

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件
    2023-01-01
  • 使用Thrift实现跨语言RPC的调用

    使用Thrift实现跨语言RPC的调用

    Thrift最大的优势就是可以实现跨语言RPC调用,尤其在一些大厂,微服务各模块之间使用不同的语言是很常见的,本文就将使用java作为服务端,用python作为客户端,实现不同语言之间的RPC调用,需要的可以参考下
    2023-10-10
  • 在Spring Boot中启用HTTPS的方法

    在Spring Boot中启用HTTPS的方法

    本文介绍了在Spring Boot项目中启用HTTPS的步骤,从生成SSL证书开始,到配置Spring Boot。HTTPS是保护Web应用程序安全的基石之一,而Spring Boot则提供了相对简易的途径来配置它,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • java随机抽取指定范围内不重复的n个数

    java随机抽取指定范围内不重复的n个数

    这篇文章主要为大家详细介绍了java随机抽取指定范围内不重复的n个数,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • SpringBoot中定时任务的使用方法解析

    SpringBoot中定时任务的使用方法解析

    这篇文章主要介绍了SpringBoot中定时任务的使用方法解析,@EnableScheduling 注解,它的作用是发现注解 @Scheduled的任务并由后台执行,没有它的话将无法执行定时任务,需要的朋友可以参考下
    2024-01-01
  • Java zxing生成条形码和二维吗代码实例

    Java zxing生成条形码和二维吗代码实例

    这篇文章主要介绍了java zxing生成条形码和二维吗代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 详解Java中finally和return的执行顺序

    详解Java中finally和return的执行顺序

    try-catch-finally是一种针对程序运行时出错的响应手段,对于一些可以预料到的出错类型,在发生时对其进行报告和补救,这篇文章主要介绍了Java中finally和return的执行顺序,需要的朋友可以参考下
    2024-01-01
  • Mybatis返回单个实体或者返回List的实现

    Mybatis返回单个实体或者返回List的实现

    这篇文章主要介绍了Mybatis返回单个实体或者返回List的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论