项目中的解耦小能手-观察者模式

embedded/2024/11/13 9:36:46/

目录

1.使用场景

2.什么是观察模式

3.观察者模式结构图

4.代码实现案例

4.1 subject代码实现

4.2 Observer类代码实现

5. 回顾总结


1.使用场景

       当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应的处理。这个时候就可以使用观察者模式

2.什么是观察模式

          观察者模式又叫发布-订阅模式(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是它们能够更新自己。

3.观察者模式结构图

4.代码实现案例

4.1 subject代码实现
public abstract class Subject {private List<Observer> observers = new ArrayList<>();public void attach(Observer observer) {observers.add(observer);}public void detach(Observer observer) {observers.remove(observer);}public void notify() {for(Observer observer: observers) {observer.update();}}}
4.2 Observer类代码实现
public abstract class Observer {public abstract void update();
}

code和观察者之间存在一定的关联性。观察者模式是一种设计模式,它用于在对象之间定义一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖它的对象都能够得到通知并自动更新。在观察者模式中,观察者对象会注册到被观察的主题对象上,当主题对象的状态发生变化时,会通知所有的观察者对象进行相应的处理。

在编程中,可以通过定义观察者接口和实现类来创建观察者对象,并将其注册到被观察的对象上。当被观察对象的状态发生变化时,会调用观察者对象的相应方法进行处理。这样,观察者对象就可以根据被观察对象的变化来做出相应的响应。

因此,code和观察者之间存在关联性,通过观察者模式可以实现code对观察者进行通知和更新。这种关联性可以帮助我们实现一些具有实时性要求的功能,例如事件驱动的系统、UI界面的更新等。

5. 回顾总结

       观察者模式所做的工作就是解耦合,让耦合双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。


http://www.ppmy.cn/embedded/11407.html

相关文章

水位传感器优点有哪些

水位传感器是一种用于检测液体水位的重要设备&#xff0c;在各种工业和民用场景中起着至关重要的作用。其中&#xff0c;光学液位传感器作为一种先进的水位检测技术&#xff0c;在市场上备受青睐&#xff0c;其优点主要包括以下几个方面。 光学液位传感器内部所有元器件均经过…

SQLAIchemy 异步DBManager封装-01入门理解

前言 SQLAlchemy 是一个强大的 Python SQL 工具包和对象关系映射&#xff08;ORM&#xff09;系统&#xff0c;是业内比较流行的ORM&#xff0c;设计非常优雅。随着其2.0版本的发布&#xff0c;SQLAlchemy 引入了原生的异步支持&#xff0c;这极大地增强了其在处理高并发和异步…

【Linux】学习记录_10_管道

10 管道 数据可以从一个进程流向另一个进程 10.1 匿名管道PIPE 匿名管道有以下的特征&#xff1a; 没有名字&#xff0c;因此不能使用open()函数打开&#xff0c;但可以使用close()函数关闭。 只提供单向通信&#xff08;半双工&#xff09;&#xff0c;也就是说&#xff0…

海外住宅IP如何助力国外问卷调查?

在数字化时代&#xff0c;国外问卷调查不仅是了解市场需求的重要手段&#xff0c;还成为了一项能够赚取额外收入的方式。随着全球范围内消费者行为的多样化&#xff0c;各类企业和机构越来越需要了解不同地区的用户观点和偏好&#xff0c;以优化产品和服务。 一、国外问卷调查…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例&#xff1a;基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失&#xff0c;为何权重更新是对的&#xff1f;1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

overleaf如何使用中文(超简单)

LaTeX默认都是不支持中文的&#xff0c;有时候我们想输入中文。 1、编译器配置为XeLaTeX 菜单-编译器-XeLaTeX 2、代码开头添加宏包 \usepackage[UTF8]{ctex}

Excel中将单元格格式改成文本后,为何要双击数字才会改变?

将大批量的数值型数字转换成文本型数字&#xff0c;当然不能一个一个的去双击做转换了。以下说说有哪个可以将数值型数字转换成文本型数字的方法。 一、转换方法 方法1.数据分列功能 选中数据后&#xff0c;点击数据选项卡&#xff0c;分列&#xff0c; 分列向导的第一步和…

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前&#xff0c;我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条&#xff0c;但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…