设计模式-观察者模式

article/2025/9/24 14:44:47

观察者模式定义

观察者模式定义对象之间的一对多以来,这样以来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

观察者模式理解

结合下面的观察者模式类图。

首先,我们要知道观察者就是那群等待被通知的人,被观察者就是当数据变换要去通知观察的人。

那么被观察者怎么知道要通知哪些人呢?

通过注册的方式,这个时候只要你需要被通知,那么你就要向我注册,那么你想要注册,就要调用被观察者的注册方法,所以观察者要拥有被观察者的对象。

然后由于为了注册方法的复用性强,所以所有的观察者都需要去统一的实现某个接口,这个时候就可以利用多态,被观察者只需要保存一个这个接口的列表即可。

然后如果有数据变化,那么就遍历列表通知所有已经注册的观察者。

松耦合(新的设计原则)

当两个对象之间松耦合时,它们可以交互,但通常对彼此所知甚少。

①首先,主题知道观察者的唯一事情时,它实现了某个接口(观察者接口)。它不需要知道观察者的具体类,它做什么或者关于它的其它事情。

②它可以在任何时候添加新的观察者。因为主题唯一依赖的东西时实现观察者接口的对象列表,我们可以在想要添加的时候,添加新的观察者。事实上,我们可以在运行时替换任意观察者为另一观察者,主题不会收到影响。同样,我们可以在任何时候移除观察者。

③要添加新的类型的观察者,我们绝对不需要修改主题。假如我们有个新的具体类需要当观察者,并不需要对主题的代码做任何修改来兼容新的类型;我们只需要在新类中实现观察者接口并注册为一个观察者。主题不关心这个,它会发通知给所有实现了观察者接口的对象。

④我们可以彼此独立地复用主题或观察者。如果我们在其它地方需要使用主题或观察者。我们可以轻松地服用,因为二者并非紧密耦合。

⑤改变主题或观察者的一方,不会影响另一方。因为二者是松耦合的,所以我们可以自由的改变任何一方,只要对象依然满足约定,实现主题或观察者接口。

观察者模式类图

 依据观察者模式类图的代码实现示例

//被观察者
public interface Subject {void registerObserver(Observer o);void removeObserver(Observer o);void notifyAllObserver();
}//被观察对象
public class Observable implements Subject{private List<Observer> observerList;public Observable() {observerList = new ArrayList<>();}@Overridepublic void registerObserver(Observer o) {if (!observerList.contains(o)){observerList.add(o);}}@Overridepublic void removeObserver(Observer o) {if (observerList.contains(o)){observerList.remove(o);}}@Overridepublic void notifyAllObserver() {for (Observer o: observerList) {o.update();}}}//观察者
public interface Observer {void update();}public class Observer1 implements Observer {@Overridepublic void update() {System.out.println("我是Observer1");}}public class Observer2 implements Observer{@Overridepublic void update() {System.out.println("我是Observer2");}}

提醒:如果说,被观察中有一些参数,当这些参数变化时要通知观察者,此时可以考虑让每个具体的观察者对象拿到具体的被观察者对象,然后update中将不更新任何参数,而有观察者通过被观察者对象自由获取。


http://chatgpt.dhexx.cn/article/us0Fv4Zv.shtml

相关文章

vue -观察者模式

观察者模式 vue中的观察者模式什么是观察者模式案例 vue中的观察者模式 vue2 底成的原理是 object.defineproperty&#xff08;&#xff09; 配合观察者模式 object.defineproperty&#xff08;&#xff09;对数据可以进行劫持 当数据发生变化的时候 需要通知被依赖的地方 这时…

观察者模式(python)

一、模式定义 1.观察者模式(Observer Pattern)&#xff1a;定义对象间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 2.观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模…

观察者模式(结合C#,Unity)

文章目录 前言概念简介观察者模式&#xff1f;发布-订阅模式&#xff1f; 观察者&#xff08;发布-订阅&#xff09;模式应用不用设计模式实现用接口实现观察者模式代码结构介绍实现发布-订阅模式 用事件实现改进接口法改进方式事件管理中心 前言 概念简介 先来看一段比较正式…

Android设计模式详解之观察者模式

前言 观察者常用于订阅-发布系统&#xff0c;能够将观察者和被观察者进行解耦&#xff0c;降低两者之间的依赖&#xff1b; 定义&#xff1a;定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态时&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新…

PHP 观察者模式 理解

用模式开发的优点是&#xff0c;能让我们的逻辑结构以及代码更加清晰&#xff0c;便于维护&#xff01; 而我们为什么要用 “观察者模式”&#xff1f;这就需要从实际运用中来理解才能更好的运用&#xff01;用如下的情境来说明吧。 事例&#xff0c;开始时我被安排做项目的登…

C++设计模式——观察者模式

观察者模式&#xff08;Observer&#xff09; 观察者模式是目前应用最广、影响范围最大的模式之一&#xff0c;因为 Observer 的一个实例Model/View/Control&#xff08; MVC&#xff09; 结构在系统开发架构设计中有着很重要的地位和意义&#xff0c; MVC实现了业务逻辑和表示…

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

什么是观察者模式&#xff1f; 例如&#xff1a;抖音上的小杨哥&#xff0c;当小杨哥在抖音开启直播时&#xff0c;会自动通知所有的粉丝。 小杨哥&#xff1a;直播间开播了&#xff01; 小杨哥为目标 抖友为观察者 目标应该具备 收集观察者删除观察者通知观察者 <!DO…

c++之观察者模式

一&#xff0c;观察者模式 随着交通信号灯的变化&#xff0c;汽车的行为也随之而变化&#xff0c;一盏信号灯可以指挥多辆汽车。 观察者模式是用于建立一种对象与对象之间的依赖关系&#xff0c;一个对象发生改变时将自动通知其他对象&#xff0c; 其他对象将相应作出反应&…

springBoot 观察者模式

观察者设计模式 jie神说用订阅和发布来理解更好&#xff0c;我想了一下是的 为什么呢&#xff1f;因为监听器这个名词听起来是一个主动的&#xff0c;可实际监听器是一个被动的玩意 比如我们事件源发布一个事件&#xff0c;然后监听器订阅了这个事件就能做出动作。 里面涉及到…

设计模式之观察者模式

1. 观察者模式概述 我们不断提到软件系统解耦的重要性&#xff0c;当减少依赖关系时&#xff0c;我们可以扩展、开发和测试不同的模块&#xff0c;而无需了解其他模块的实现&#xff0c;只需要知道它们实现的抽象。尽管如此&#xff0c;在实践中&#xff0c;模块是需要协同工作…

观察者模式及应用场景

观察者模式&#xff08;Observer Design Pattern&#xff09;,也叫做发布订阅模式&#xff08;Publish-Subscribe Design Pattern&#xff09;、模型-视图&#xff08;Model-View&#xff09;模式、源-监听器&#xff08;Source-Listener&#xff09;模式、从属者&#xff08;D…

设计模式:观察者模式

1.1 观察者模式 1.1.1 观察者模式的引入案例 天气预报在现实生活中的有着非常广泛的应用&#xff0c;在即将发生灾害天气时&#xff0c;专用的气象广播电台可用一定波长的信号&#xff0c;使这种收音机自动开启呼叫&#xff0c;这样&#xff0c;入睡的人也能被其信号唤醒&…

《设计模式》之观察者模式

一、什么是观察者模式 观察者模式又称为 发布-订阅模式&#xff0c;定义了对象之间一对多依赖关系&#xff0c;当目标对象(被观察者)的状态发生改变时&#xff0c;它的所有依赖者(观察者)都会收到通知。一个观察目标可以对应多个观察者&#xff0c;而这些观察者之间没有相互联…

kotlin——观察者模式

ObserverManager类&#xff1a; /*** 1、观察者模式管理类*/ class ObserverManager : SubjectListener {/*** 观察者集合*/private val list ArrayList<ObserverListener>()override fun add(observerListener: ObserverListener) {// 加入队列list.add(observerListe…

观察者模式及其应用场景

观察者模式&#xff08;Observer Design Pattern&#xff09;,也叫做发布订阅模式&#xff08;Publish-Subscribe Design Pattern&#xff09;、模型-视图&#xff08;Model-View&#xff09;模式、源-监听器&#xff08;Source-Listener&#xff09;模式、从属者&#xff08;D…

C++观察者模式

C观察者模式 当对象间存在一对多关系时&#xff0c;则使用观察者模式&#xff08;observer pattern&#xff09;。比如&#xff0c;当一个对象被修改时&#xff0c;则会自动通知发依赖它的对象。观察者模式属于行为型模式。 Observer模式是应用最多、影响最广的设计模式之一&am…

Android开发模式之观察者模式

目录 一、定义 1.观察者模式 2.UML类图 3.观察者模式中的角色 二、使用场景 三、简单实现 四、观察者模式在java.util包中的应用 五、观察者模式在Button中的应用 六、观察者模式在ListView中的应用 七、观察者模式的优缺点 观察者模式的优点 观察者模式的缺点 一、…

java设计模式-观察者模式

观察者模式介绍&#xff1a; 观察者模式&#xff08;有时又被称为发布/订阅模式&#xff09;是软件设计模式的一种。在此种模式中&#xff0c;一个目标对象管理所有相依于它的观察者对象&#xff0c;并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法…

观察者模式(Observer) 简介

一, 观察者模式(Observer) 的定义 观察者模式: 定义了一种 1对多 的依赖关系, 让多个观察者对象同时监听1个主题对象. 这个主题对象在状态发生变化时, 会通知所有的观察者对象, 使它们能够同时更新自己. 稍微解释一下 这个1 对多 的依赖关系. 1对多 这个关键词我们常常在DB …

观察者模式

第23章 观察者模式 一、观察者模式的基本介绍 观察者模式(Observer Pattern)&#xff1a;定义对象间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 观察者模式又叫做发布-订阅&#xff08;Publish/Subsc…