观察者模式(python)

article/2025/9/24 15:45:55

一、模式定义

1.观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。

2.观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式

3.观察者模式是一种对象行为型模式

二、模式结构

观察者模式包含如下角色。
1. Subject(目标)
目标又称为主题,它是指被观察的对象。在目标中定义了一个观察者集合,它可以存储任意数量的观察者对象,它提供一个接口来增加和删除观察者对象,同时它定义了的通知方法notify()。目标类可以是接口,也可以是抽象类或实现类。
2.ConcreteSubject(具体目标)
具体目标是目标类的子类,通常它包含经常发生改变的数据,当它的状态发生改变时,向它的各个观察者发出通知。同时它还实现了在目标类中定义的抽象业务逻辑方法(如果有的话)。
3. Observer(观察者)
观察者将对观察目标的改变做出反应,观察者一般定义为接口,该接口声明了更新数据的方法update(),因此又称为抽象观察者。
4. ConcreteObserver(具体观察者)
在具体观察者中维护一个指向具体目标对象的引用,它存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致;它实现了在抽象观察者Observer中定义的update( )方法。通常在实现时,可以调用具体目标类的attach()方法将自己添加到目标类的观察者集合中或通过detach()方法将自己从目标类的观察者集合中删除。

三、例子

         在天猫华为手机旗舰店,用户可以购买各种不同型号的华为手机,三位华为忠实粉丝,想购买华为 MateX 系列最新款手机,但是因为手机芯片原因,MateX 系列手机一直处于断货状态,网站提供了“到货通知”的选项,只要选择了该选项的用户,在手机到货时就会第一时间收到到货通知,请选择合适的模式设计该模块。
1.Obesrver
# @Time    : 2022/11/21 14:25
# @Author  : ZQH
# @FileName: Observer.py
# @Software: PyCharmfrom abc import ABCMeta, abstractmethod# 抽象观察者
class Zqh0224StaffObserve(metaclass=ABCMeta):@abstractmethoddef update(self,notice): # notice 是一个 notice类对象pass

2.ConcreteObserver

# @Time    : 2022/11/21 14:25
# @Author  : ZQH
# @FileName: ConcreteObserver.py
# @Software: PyCharmfrom Observer import Zqh0224StaffObserveclass Zqh0224HuaweiFans(Zqh0224StaffObserve):def __init__(self,name):self.name = nameself.information = Nonedef update(self,notice):self.information = self.name + '收到消息:' + notice.information

3.Subject

# @Time    : 2022/11/21 14:24
# @Author  : ZQH
# @FileName: Subject.py
# @Software: PyCharm# 目标 天猫华为手机旗舰店
class Zqh0224HuaweiMall():def __init__(self):self.observes = []  # 订阅的观察者列表# 添加观察者def attach(self, obs):self.observes.append(obs)# 删除观察者def detach(self, obs):self.observes.remove(obs)# 发布消息,每个观察者能接受消息def notify(self):for obs in self.observes:obs.update(self)

4.ConcreteSubject

# @Time    : 2022/11/21 14:25
# @Author  : ZQH
# @FileName: ConcreteSubject.py
# @Software: PyCharmfrom Subject import Zqh0224HuaweiMall# 具体目标 到货通知
class Zqh0224ArrivalNotification(Zqh0224HuaweiMall):def __init__(self, company_info=None):super().__init__()self.__company_info = company_info# 读操作@propertydef information(self):return self.__company_info# 写操作@information.setterdef information(self, info):self.__company_info = infoself.notify()

四、优缺点 

1.观察者模式的优点
(1)观察者模式可以实现表示层和数据逻辑层的分离,并定义了稳定的消息更新传递长期,抽象了更新接口,使得可以有各种各样不同的表示层作为具体观察者角色。
(2)观察者模式在观察目标和观察者之间建立一个抽象的耦合。观察目标只需要维持一个抽象观察者的集合,每一个具体观察者都符合抽象观察者的定义。观察目标不需要了解其具体观察者,只需知道它们都有一个共同的接口即可。由于观察目标和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。
(3)观察者模式支持广播通信,观察目标会向所有注册的观察者发出通知,简化了一对多系统设计的难度。
(4)观察者模式符合“开闭原则”的要求,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便。


2.观察者模式的缺点
(1)如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。
(2)如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用可能导致系统崩溃。
(3)观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。


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

相关文章

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

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

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

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

PHP 观察者模式 理解

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

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

观察者模式(Observer) 观察者模式是目前应用最广、影响范围最大的模式之一,因为 Observer 的一个实例Model/View/Control( MVC) 结构在系统开发架构设计中有着很重要的地位和意义, 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…

观察者模式(Observer Pattern)

一、什么是观察者模式 观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系&#xff0c;当一个对象(目标对象)的状态发生改变时&#xff0c;所有依赖于它的对象(观察对象)都得到通知并被自动更新。特点&#xff1a;被观察者和观察者一般是一对多的关系&#xf…

设计模式之观察者模式详解(附应用举例实现)

文章目录 1 观察者模式介绍2 观察者模式详解2.1 观察者模式结构2.2 观察者模式实现2.3 观察者模式应用举例 3 观察者模式与MVC 1 观察者模式介绍 “红灯停&#xff0c;绿灯行”。在这个过程中&#xff0c;交通信号灯是汽车的观察目标&#xff0c;而汽车则是观察者。随着交通信…