java23种设计模式(十八) -- 观察者模式(行为设计模式)

MFRC522防冲突机制详解:当两张IC卡同时靠近读写器,会发生什么? 本文深入解析了MFRC522芯片在多张IC卡同时靠近RFID读写器时的防冲突机制,重点介绍了二叉树搜索算法在比特级的实现原理。通过详细的寄存器配置优化和实际工程案例,展示了如何有效解决信号碰撞问题,提升多卡场景下的读写性能。 阅读详情

观察者模式

简介

定义

在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。

大白话

其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。

角色

  • 抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。
  • 抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。
  • 具体被观察者角色:也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。
  • 具体观察者角色:实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调。

代码实现

场景

有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。

项目结构

在这里插入图片描述

代码

抽象被观察者接口

/***
 * 抽象被观察者接口
 * 声明了添加、删除、通知观察者方法
 * @author jstao
 *
 */
public interface Observerable {
    
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObserver();
    
}

抽象观察者接口

/***
 * 抽象观察者
 * 定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。
 * @author jstao
 *
 */
public interface Observer {
    public void update(String message);
}

定义被观察者,实现了Observerable接口,对Observerable接口的三个方法进行了具体实现,同时有一个List集合,用以保存注册的观察者,等需要通知观察者时,遍历该集合即可。

/**
 * 被观察者,也就是微信公众号服务
 * 实现了Observerable接口,对Observerable接口的三个方法进行了具体实现
 * @author jstao
 *
 */
public class WechatServer implements Observerable {
    
    //注意到这个List集合的泛型参数为Observer接口,设计原则:面向接口编程而不是面向实现编程
    private List<Observer> list;
    private String message;
    
    public WechatServer() {
        list = new ArrayList<Observer>();
    }
    
    @Override
    public void registerObserver(Observer o) {
        
        list.add(o);
    }
    
    @Override
    public void removeObserver(Observer o) {
        if(!list.isEmpty())
            list.remove(o);
    }

    //遍历
    @Override
    public void notifyObserver() {
        for(int i = 0; i < list.size(); i++) {
            Observer oserver = list.get(i);
            oserver.update(message);
        }
    }
    
    public void setInfomation(String s) {
        this.message = s;
        System.out.println("微信服务更新消息: " + s);
        //消息更新,通知所有观察者
        notifyObserver();
    }

}

定义具体观察者,微信公众号的具体观察者为用户User

/**
 * 观察者
 * 实现了update方法
 * @author jstao
 *
 */
public class User implements Observer {

    private String name;
    private String message;
    
    public User(String name) {
        this.name = name;
    }
    
    @Override
    public void update(String message) {
        this.message = message;
        read();
    }
    
    public void read() {
        System.out.println(name + " 收到推送消息: " + message);
    }
    
}

测试类

public class ApiTest {

    @Test
    public void testCommand(){
        WechatServer server = new WechatServer();

        Observer userZhang = new User("ZhangSan");
        Observer userLi = new User("LiSi");
        Observer userWang = new User("WangWu");

        server.registerObserver(userZhang);
        server.registerObserver(userLi);
        server.registerObserver(userWang);
        server.setInfomation("PHP是世界上最好用的语言!");

        System.out.println("----------------------------------------------");
        server.removeObserver(userZhang);
        server.setInfomation("JAVA是世界上最好用的语言!");
    }

}

在这里插入图片描述

优点

观察者模式提供了一种对象设计,让主题和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,主题只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节.

这样的话,由于松耦合,改变主题或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它.

降低对象之间的耦合度,也是面设对象设计的一个很重要的原则.

从CMOS到CML:手把手教你为PLL选对分频器电路(附性能对比与选型指南) 本文深入解析了PLL分频器电路的三大主流架构——静态CMOS、动态TSPC和CML,通过性能参数对比和实测数据,提供了从频率需求、功耗预算到噪声防护的完整选型指南。特别针对高频应用的CML分频器设计要点和混合架构优化方案,为射频与模拟IC设计工程师提供实用参考。 阅读详情

相关推荐

在线绘制富集分析多组气泡图和单细胞分析marker基因矩阵气泡图

常规的GO或者KEGG通路富集分析结果通常以气泡图的形式展示,然而这个气泡图仅仅是一个比较的结果,如果想在一张图上展示多个比较的结果,就需要用到多组气泡图(图1,左侧)。 单细胞RNA-seq分析结果中,矩阵形式的气泡图可以很好地展示marker基因(X轴)在不同cluster(Y轴)中的表达情况(图1,右侧)。

微生信 3663

观察者模式和发布订阅模式

观察者(Observer),又称发布-订阅(Publish-Subscrice),属于23中设计模式之一。发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。

三冬暖 3103

Minitab实战:用Weibull分布预测产品寿命的5个关键参数(附真实案例)

本文通过一个真实的电容器老化测试案例,详细介绍了如何运用Minitab软件进行Weibull分布分析,以预测产品寿命。文章深入解读了形状参数β、尺度参数η等五个关键参数的工程意义与商业价值,指导工程师从失效数据中提取洞察,并将其应用于可靠性评估、保修策略制定及成本预估等实际业务决策。

weixin_29231263的博客 520

设计模式之观察者模式

文章目录什么是观察者模式观察者模式包含的四个角色使用场景观察者模式的实现编写一个测试类 什么是观察者模式 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。 观察者模式包含的四个角色 抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集...

weixin_42310146的博客 183

Xilinx Chip2Chip IP核实战:Aurora PHY通信配置与仿真避坑指南

本文深入解析Xilinx Chip2Chip IP核与Aurora PHY的通信配置与仿真优化,提供实战避坑指南。通过AXI协议转换桥实现FPGA间高速数据传输,详细讲解Aurora PHY参数设置、仿真加速技巧及常见问题解决方案,帮助工程师快速部署稳定高效的芯片间通信系统。

g5h6i7j的博客 1005

当windows安装git时出现以下错误提示

Windows安装Git时出现多个系统配置设置失败错误(exit code 4294967295),提示包括无法设置textconv、LFS过滤器和SSL等配置项。关键问题在于scalar.exe版本不兼容,系统提示"该版本的scalar.exe与你运行的Windows版本不兼容"。解决方案是检查程序版本是否正确,下载与Windows系统兼容的正确版本重新安装即可。

沧澜的博客 1875

设计模式之观察者模式(发布订阅模式 > 观察者模式)

写在前面 各位看官老爷如果本篇文章对你有帮助就给个赞赞赞赞赞吧 行为型模式—备忘录模式 硬肝系列目录 创建型模式 23种设计模式之工厂模式 23种设计模式之抽象工厂模式 23种设计模式之建造者模式 23种设计模式之原型模式 23种设计模式之单例模式 结构型模式 23种设计模式之适配器模式 23种设计模式之桥梁模式 23种设计模式之代理模式 23种设计模式之外观模式 23种设计模式之装饰器模式 23种设计模式之享元模式 23种设计模式之组合模式 行为型模式 23种设计模式之责任链模式 23种设计模式之命令模

ALiangXLogic的博客 279

汇川EASY系列之以太网通讯(MODBUS_TCP做从站)

汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站)同时连接。

这是一个长期关注工控行业技术的博客,实现0-1的突破,期待您的关注和留言 8861

23种设计模式 之 Observer模式(发布-订阅模式)[C语言]

一、概念定义     Observer模式又称为发布-订阅模式。     Observer模式:定义了一种一对多的依赖关系,让多个观察者(Observer)同时监听某一主题对象(Subject)。当这个主题对象(Subject)的状态发生变化时,会通知观察者对象(Observer),让他们能够自动更新自己。 二、模式结构图 图1 Observer模式结构图 三、场景设计

做事先做人! 9056

交流异步机VVVF变频控制simulink/matlab仿真分析

VVVF,是Variable Voltage and Variable Frequency的缩写, 意为:可变电压、可变频率,也就是变频调速系统。 VVVF控制的逆变器连接电机,通过同时改变频率和电压,达到磁通恒定(可以用反电势/频率近似表征)和控制电机转速(和频率成正比)的目的,所以多应用在变频器中,属于工业自动化领域。

Ezekiel_Mok的博客 4207

华为硬件工程师笔试题

1、基尔霍夫定理的内容是什么?(仕兰微电子)   基尔霍夫定理包括电流定律和电压定律。   电流定律(KCL):在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于零。   电压定律(KVL):在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于零。   2、平板电容公式(C=εS/4πkd)。(未知)   3、最基本的如三极管曲线特性。(未知)   4、描述反馈电路...

weixin_33717117的博客 2万+

观察者模式

观察者模式 概述 定义: 又被称为发布-订阅(Publish/Subscribe)模式, 它定义了一种一对多的依赖关系, 让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 结构 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。 ConcreteSubject:具..

qq_39368007的博客 545

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

关于Java中的23种设计模式简介(超详细)

23种设计模式 文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基

liubs_的博客 3022

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java学习视频 java常用23种设计模式

java学习视频主要详细讲解java常用23种设计模式,此套java教程为百度网盘下载! 我曾经花了1万多报过java培训班.可能太过愚钝,感觉白学了。这套java学习视频讲的很好,我培训过,虽说学的很差,但是耳濡目染也算有点基础,写作业的时候没什么思路,但是参考了别人的思路,自己也能写完,写完作业感觉很有成就感。祝大家学有所成!   java学习视频介绍   java常用23...

fengliaoai的博客 1万+

Java进阶 23种设计模式 详解+应用+实例代码

文章目录前言一、单例模式1.概念2.单例模式应用(1) 懒汉式 基础版(2) 懒汉式 双重校验锁版(3) 饿汉式 单例模式(4)登记式 单例模式 前言 Java的 23种设计模式 创建型模式,共五种(1-5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种(6-12):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种(13-23):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式

Jiang_bug的博客 1万+

【软件工程】详解23种设计模式原理java实现

设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。23中设计模式的关系定义一个用户创建对象的接口,但由子类决定实例化哪个类。提供一个创建相关或依赖接口的接口,而无需指定具体类。确保一个类只有一个实例,并提供对该例的全局访问点。将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

杰西笔记 1121

【每天一个java设计模式(完)】 - 四万字实现23种设计模式(附示例源码)

什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则 创建型模式 工厂模式:【每天一个java设计模式(一)】 - 工厂模式 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式 单例模式:【每天一个java设计模式(三)】 - 单例模式 原型模式:【每天一个java设计模式(四)】 - 原型模式 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式 结构型模型 适配器模式 : 【每天一个java设计模式(六)】 - 适配器模式 代理模.

1+1=王的博客 6900

java 23中设计模式

Java总共有23中常见的设计模式。它们主要可以分为3类,创建型,结构型以及行为型。  创建型的设计模式有: 一、Singleton,单例模式:保证一个类只有一个实例,并提供一个唯一的全局访问点。 二、Abstract Factory,抽象工厂:提供一个创建一系列相关或者互相依赖的对象的接口,而无需指定它们的具体类。 三、Factory Method,工厂方法:定义一个用于创建对象的接口,F...

葛大胖的博客 172

Java 之 23 种设计模式解析(来源于尚硅谷)

题目: Java 之 23 种设计模式解析 一、设计模式概述 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式, 共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式, 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访

戈多 3111

java23种设计模式个人整理_GoF设计模式合集

1 概述 这篇文章是对GoF23种设计模式+1种非GoF模式的合集,由笔者自己的笔记整理而来,每个模式都详细描述了步骤,角色等,以及使用Java实现的具体的例子,下面是目录:基础设计模式概述UML基础创建型模式单例模式简单工厂模式(非GoF模式)工厂方法模式抽象工厂模式原型模式建造者模式结构型模式适配器模式桥接模式组合模式装饰模式外观模式享元模式代理模式行为型模式职责链模式命令模式解释器模式迭代器...

weixin_39669133的博客 105

设计模式(十八)行为型:中介者模式详解

中介者模式(Mediator Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于通过引入一个中介者对象来封装一组对象之间的交互,从而降低对象间的耦合度,使对象不必显式地相互引用,实现松耦合的协作关系。

谦与谦寻的神隐 898

JAVA六大设计原则 和 23种设计模式

相关书籍:《大话设计模式》、《Java设计模式》、《设计模式之禅》、《研磨设计模式》、《Head First 设计模式》 JAVA六大设计原则 JAVA设计模式提供六个基本原则,分别是: 开闭原则(OCP) - The Open-Closed Principle 单一职责原则(SRP) - Single Responsibility Principle 里氏替换原则(LSP) - Lisko...

许浑的博客 1823

设计模式篇—常用设计模式—23种设计模式简介

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。最新整理面试题上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题最新整理电子书最新整理大厂面试文档以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!外链图片转存中…(img-P4ulKtlu-1712993134654)]

D1561691的博客 878

Java的23种设计模式

一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点      二、Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。      三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

shirenfeigui的专栏 1401

Java中的23种设计模式

Java总共有23中常见的设计模式

Zhu的专栏 667

Java 之23种设计模式解析

一、设计模式概述 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 具体如下: ...

尚硅谷铁杆粉丝的博客 240

关于Java中的23种设计模式简介

简介 设计模式(Design Pattern),是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式于己、于他人、于系统都是多赢的,设计模式使代码编制真正工程化。设计模式是软件工程的基石,如同大厦的一块块砖石一样使代码编制真正工程化。 只有精通了设计模式,才敢说真正理解了软件工程。可以说,设计模式是每...

Kobe Bryant 392
上一篇: java23种设计模式(十七) -- 备忘录模式(行为设计模式)
下一篇: java23种设计模式(十九) -- 状态模式(行为设计模式)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值