iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JAVA观察者模式的的讲解及代码实现
  • 270
分享到

JAVA观察者模式的的讲解及代码实现

2024-04-02 19:04:59 270人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录概念组成 实现 总结 概念 观察者模式又叫做发布-订阅模式,是对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动

概念

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

组成 

抽象主题角色(Subject

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

抽象观察者角色(Observer

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

具体主题角色(Concrete Subject

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

具体观察者角色(Concrete Observer

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

在这里插入图片描述

实现 

抽象观察者Observer接口

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

public interface Observer {
	//收到通知,改变自身状态
    void update();
}

具体观察者ObserverOneObserverTwo

实现Observer接口中的update方法

public class ObserverOne implements Observer{
    @Override
    public void update() {
        System.out.println("第一个观察者收到通知,状态更新了");
    }
}
public class ObserverTwo implements Observer {
    @Override
    public void update() {
        System.out.println("第二个观察者收到通知,状态更新了");
    }
}

Subject接口

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

public interface Subject {
    //添加观察者
    void add(Observer observer);
    //删除观察者
    void remove(Observer observer);
    //通知所有观察者
    void notifyObservers();
    //自身操作
    void operation();
}

抽象目标类AbstractSubject

抽象类,因为观察者数量不固定,所以使用Vector动态数组存储观察者,实现Subject接口中的add,remove,notifyObservers方法,operation方法由具体目标类实现

public abstract class AbstractSubject implements Subject{
    Vector<Observer> vector = new Vector<Observer>();
    @Override
    public void add(Observer observer){
        vector.add(observer);
    }
    @Override
    public void remove(Observer observer){
        vector.remove(observer);
    }
    @Override
    public void notifyObservers(){
        for (Observer observer : vector) {
            observer.update();
        }
    }
}

具体目标类MySubject

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

public class MySubject extends AbstractSubject{
    @Override
    public void operation() {
        System.out.println("具体目标状态改变");
        System.out.println("正在通知观察者。。。");
        notifyObservers();
        System.out.println("通知完毕!");
    }
}

测试类Test

public class Test {
    public static void main(String[] args) {
        MySubject mySubject = new MySubject();
        mySubject.add(new ObserverOne());
        mySubject.add(new ObserverTwo());
        mySubject.operation();
    }
}

在这里插入图片描述

总结 

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

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

观察者模式什么时候使用

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

观察者模式的优点

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

观察者模式的缺点

  • ①如果一个目标中依赖的直接观察者和间接观察者有很多的话,通知所有观察者需要花费很多时间
  • ②如果观察者和被观察者之间有循环依赖的话,可能会出现循环调用,导致系统崩溃
  • ③观察者无法知道目标状态是如何变化的,只能知道目标状态发生了改变

观察者模式的注意事项

  • ①JAVA中已经有了观察者模式的支持类,可以直接使用
  • ②避免循环调用
  • ③如果顺序执行观察者的更新方法,某一观察者错误会导致系统卡住,一般采用异步方式。

 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!    

--结束END--

本文标题: JAVA观察者模式的的讲解及代码实现

本文链接: https://www.lsjlt.com/news/141320.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA观察者模式的的讲解及代码实现
    目录概念组成 实现 总结 概念 观察者模式又叫做发布-订阅模式,是对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动...
    99+
    2022-11-13
  • Java观察者模式实例代码分析
    这篇“Java观察者模式实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java观察者模式实例代码分析”文章吧。优...
    99+
    2023-06-29
  • golang观察者模式实现的代码怎么写
    在Go语言中实现观察者模式,可以按照以下步骤进行: 定义主题(Subject)接口,包含以下方法: type Subject i...
    99+
    2023-10-23
    golang
  • 详解Java中的观察者模式
    详解Java中的观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更...
    99+
    2023-05-31
    java 观察 观察者模式
  • Java观察者模式的深入了解
    目录一、观察者模式的定义和特点二、观察者模式的结构三、代码实例代码示例总结一、观察者模式的定义和特点 观察者模式的定义: 指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时...
    99+
    2022-11-12
  • java实现观察者模式的示例分析
    小编给大家分享一下java实现观察者模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则...
    99+
    2023-05-30
    java
  • 怎么理解Java设计模式的观察者模式
    本篇内容介绍了“怎么理解Java设计模式的观察者模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是观察者模式在许多设计中,经常涉及...
    99+
    2023-06-25
  • Java观察者模式的实现方法是什么
    Java观察者模式的实现方法如下: 定义观察者接口(Observer):观察者接口定义了观察者对象的更新方法,通常包括一个upd...
    99+
    2023-10-23
    Java
  • Go语言设计模式之实现观察者模式解决代码臃肿
    目录引言观察者模式概念我的理解Go 实现观察者模式Go 实现事件总线代码单测总结引言 我们先来简单学习一下用 Go 实现观察者设计模式,给怎么实现事件驱动编程、事件源这些模式做个铺垫...
    99+
    2022-11-11
  • 举例讲解Python设计模式编程中的访问者与观察者模式
    访问者模式 我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在某层结构中增加新的方法,要是在基类上面添加或者变更,可能破坏原来...
    99+
    2022-06-04
    模式 观察者 访问者
  • java和Spring中观察者模式的应用详解
    目录一、观察者模式基本概况1.概念2.作用3.实现方式二、java实现两种观察者模式1.Observer接口和Observable类2.EventObject和EventListen...
    99+
    2022-11-12
  • Java中常用的设计模式之观察者模式详解
    目录优点缺点使用场景注意事项一、实现方式1、观察者抽象类2、第一个观察者3、第二个观察者4、第三个观察者5、定义主题二、测试总结优点 1.观察者和被观察者是抽象耦合的。 2.建立一套...
    99+
    2022-11-13
  • C#中的EventHandler观察者模式怎么实现
    这篇文章主要介绍“C#中的EventHandler观察者模式怎么实现”,在日常操作中,相信很多人在C#中的EventHandler观察者模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中的Eve...
    99+
    2023-06-29
  • JavaScript设计模式中的观察者模式怎么实现
    本文小编为大家详细介绍“JavaScript设计模式中的观察者模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript设计模式中的观察者模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-02
  • 如何实现观察者模式及Spring中的事件编程模型
    这篇“如何实现观察者模式及Spring中的事件编程模型”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来...
    99+
    2022-10-19
  • C#实现观察者模式(Observer Pattern)的两种方式
    在观察者模式中有2个要素:一个是被观察对象,另一个是观察者。但被观察对象的状态发生改变会通知观察者。 举例:把订阅报纸的人看作是观察者,把报纸看作被观察对象。每当有新的新闻就要通知订...
    99+
    2022-11-13
  • Android回调与观察者模式的实现原理
    回调与观察者模式的实现原理:废话不多说,直接上Demo回调的原理: 观察者模式: A类中定义一个被观察者画家 package com.example.view;...
    99+
    2022-06-06
    观察者模式 Android
  • Java实现数据更新和事件通知的观察者模式
    目录介绍实现总结优点缺点应用场景介绍 Java观察者模式(也称发布-订阅模式)是一种行为设计模式,用于对象之间的松散耦合,即当一个对象的状态发生变化时,其他依赖该对象的对象会被自动通...
    99+
    2023-05-17
    Java观察者模式 Java设计模式
  • Java观察者模式之实现对象间的一对多依赖
    目录一、介绍1.1 什么是Java观察者模式?1.2 观察者模式的优缺点二、实现步骤2.1 创建被观察者类2.2 创建观察者接口和实现类2.3 在被观察者类中添加注册、移除和通知观察...
    99+
    2023-05-19
    Java观察者模式 对象间一对多依赖 Java观察者模式一对多依赖
  • Android中实现观察者模式的原理是什么
    这篇文章将为大家详细讲解有关Android中实现观察者模式的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。观察者模式:A类中定义一个被观察者画家package com.exampl...
    99+
    2023-05-31
    android 观察 观察者模式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作