java观察者模式与消息队列,jdk 观察者模式

  java观察者模式与消息队列,jdk 观察者模式

  

目录
概念组成实现总结

  

概念

观察者模式又叫做发布-订阅模式,是对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新

  

组成

抽象主题角色(主题

  也叫抽象目标类,抽象主题知道自己的观察者有哪些,提供删除和新增观察者的方法以及通知观察者的抽象方法,由抽象类或接口实现

  抽象观察者角色(观察家

  包含了一个更新的抽象方法,当收到具体主题的更新通知后调用,由抽象类或接口实现

  具体主题角色(混凝土主体

  也叫具体目标类,实现抽象目标类的通知方法,当具体主题发生改变时通知所有订阅自己的观察者

  具体观察者角色(混凝土观察家

  实现抽象观察者角色的抽象方法,收到主题更改通知后更改自身状态

  

实现

抽象观察者观察员接口

  包含一个观察者接收通知改变自身状态方法

  公共接口观察者{//收到通知,改变自身状态void update();}具体观察者观察家一观察家二

  实现观察者接口中的更新方法

  公共类观察者实现观察者{ @ Override public void update(){ system。出去。println(第一个观察者收到通知,状态更新了);} }公共类观察者二实现观察者{ @ Override public void update(){ system。出去。println(第二个观察者收到通知,状态更新了);} }主题接口

  包含添加,删除,通知观察者方法,由抽象目标类实现,还有一个自身操作的方法,由具体目标类实现

  公共接口主题{ //添加观察者无效添加(观察者观察者);//删除观察者无效删除(观察者观察者);//通知所有观察者void notify observer();//自身操作空的操作();}抽象目标类抽象主题

  抽象类,因为观察者数量不固定,所以使用Vector动态数组存储观察者,实现科目接口中的添加、删除、通知观察者方法,operation方法由具体目标类实现

  公共抽象类抽象主题实现Subject { vector观察者vector=new vector观察者();@覆盖公共void添加(观察者观察者){ vector.add(观察者);} @覆盖公共void remove(Observer观察者){ vector.remove(观察者);} @ Override public void notify Observer(){ for(Observer观察者:向量){观察者。update();} } }具体目标类我的主题

  继承抽象主题类,实现操作方法,并在operation方法中调用notifyObservers方法以达到自身状态改变后通知观察者的效果

  公共类我的主题扩展抽象主题{ @ Override public void operation(){ system。出去。println(具体目标状态改变);System.out.println(正在通知观察者。);通知观察者();System.out.println(通知完毕!);} }测试类测试

  public class Test { public static void main(String[]args){ my subject my subject=new my subject();我的主题。add(新观察者一个());我的主题。add(新观察者二());我的主题。operation();}}

  

总结

观察者模式主要解决了什么问题

  在低耦合的条件下,一个对象状态发生改变,其他对象会收到通知

  观察者模式什么时候使用

  一个对象状态改变,所有有依赖关系的对象都会收到广播通知

  观察者模式的优点

  观察者和目标是抽象耦合的,低耦合,是一套触发机制

  观察者模式的缺点

  如果一个目标中有很多直接观察者和间接观察者,那么通知所有观察者就要花很多时间。如果观测者和被观测者之间存在循环依赖,可能会出现循环调用,导致系统崩溃。观察者无法知道目标状态如何变化,只能知道目标状态改变了观察者模式的注意事项.

  JAVA中已经有观察者模式的支持类,可以直接使用避免循环调用如果顺序执行观察者的更新方法,一个观察者的错误会导致系统卡顿,一般是异步的。本文到此为止。希望能帮到你,也希望你能多关注更多的科普IT的内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • ubuntu18.04安装jdk8,ubuntu中安装jdk
  • ubuntu18.04安装jdk8,ubuntu中安装jdk,Ubuntu 安装 JDK8 的两种方法(总结)
  • JDK1.8安装教程,安装配置jdk1.8
  • JDK1.8安装教程,安装配置jdk1.8,2020JDK1.8安装教程详解(一次就可安装成功)
  • ,,jdk8使用stream实现两个list集合合并成一个(对象属性的合并)
  • ,,IntelliJ IDEA之配置JDK的4种方式(小结)
  • java代理模式详解,java代理模式的典型例子,java代理模式(jdk proxy)
  • java中spi有什么作用,jdk的spi机制
  • java中spi有什么作用,jdk的spi机制,一文搞懂Java的SPI机制(推荐)
  • ,,详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)
  • ,,JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版整理
  • ,,JAVA JDK8 List分组的实现和用法
  • idea配置tomcat和jdk,idea配置本地gradle
  • 简单叙述一下jdk环境变量的配置,jdk环境变量配置是干什么的
  • 建立Java开发环境,安装JDK,一般需要设置环境变量,在安装完JDK后,需要在环境变量中配置
  • 留言与评论(共有 条评论)
       
    验证码: