观察者模式

极化码理论及算法研究4-巴氏参数、GA算法以及matlab仿真 目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 极化码编码 ... 阅读详情

观察者模式

最近重温的一部电视剧《李狗嗨》,是日剧,内容大概是律师处理案子。里面的第二部有一条主线,是审判一个民众都认为应该死亡的一个女人,因为这个女人靠男人过成富豪。最后的结局当然是......但是当审判长锤下的那一刻,最忙的反而是一些记者、写手等等,因为为了抢速度发行报纸和新闻播报等等。其实这个法庭可视为观察者模式,法官是被观察者,当被观察者做出判决的时候,观察者纷纷做出了自己的状态变化,并且去执行自己应该执行的操作。因此观察者模式就是,一对多的对象对应关系,当这个被观察者发生状态变化的时候,一系列的观察都会进行状态变化并且可能还需要执行一些操作。

 

Subject类:所有被观察的共同类,拥有的是观察者列表、然后进行添加和删除观察者的方法、一个用于刷新所有观察者对象状态的方法+各种实际方法

ConcreteSubject:具体被观察者,每个不同的被观察发生相同的状态变化的时候,所引起其观察者状态变化是不同的。不然法庭中的审判长判决和律师进行辩护,所引起的相同观察者,其变化也是不同的。

Observer:观察者抽象类,拥有的是一些共有等功能方法接口、数据,如状态更新等等

ConcreteObserver:具体类,去具体实现每个观察者状态变化时可能进行的数据变化、行为操作等等

 

使用场景:

  • 一对多的关系网中,一个对象变化,随之变化的对象不知道具体多少个的时候
  • 需要一种链式触发的时候。比如审判-报纸-政府反应等等
  • 对象变化必须通知一些未知对象
  • 当A依赖于B,并且需要分开来进行拓展的时候

优点:

  • 耦合度降低
  • 建立了一套触发机制,和反射相似。

缺点:

  1. 通知的时候,需要观察者队列进行通知,如果队列过长,可能导致时间上的误差
  2. 当观察者过多的时候,容易写着了环形的互相触发机制
  3. 不知道观察类怎么变化,只能知道它变化了

 

实操

 

思维:

  1. 观察者,在代码中是被调用者,所以选择先定义,而内容就是状态变化,然后在这个方法接口中调用自己的方法完成行为执行
  2. 先写抽象的Observer,然后去完成具体的类ConcreteObserver
  3. 完成CSomThing类,其中含有观察者列表、删除和添加接口、循环通知观察者接口、共同的方法接口
  4. 实现法官类,具体实现需要实现的方法,我这里是进行判决,然后进行循环通知观察者。其实也可以自定义循环逻辑,添加参数进行判断等等
// ObserverModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
using namespace std;

//抽象观察者,观察者所具备的一些功能
class CNewsPerson
{
public:
    virtual void updateNews() {}
};
//具体观察者,去实现功能,
//就像等待审判的人有记者是网络写手、纸质写手等等。
class CPaperPerson:public CNewsPerson
{
public:
    void updateNews()
    {
        cout << "今天的判审结果是“无罪”,明天的头条有了。" << endl;
    }
};

//一些具体的事情或者变化,比如审判长,下面应该有很多人记者、涉案人员、律师等等
class CSomeThing
{
private:
    //人员集中
    vector<CNewsPerson*> m_vecPerson;
public:
    //添加和删除人员
    void addNewsPerson(CNewsPerson* person)
    {
        m_vecPerson.push_back(person);
    }
    void deleteNewsPerson(CNewsPerson* person)
    {
        //m_vecPerson.remove(person);
        //删除观察者
    }

    virtual void toDoSomething() {}
    //循环遍历观察者
    void toUpdate()
    {
        for (int i = 0; i < m_vecPerson.size(); ++i)
        {
            if (m_vecPerson[i])
                m_vecPerson[i]->updateNews();
        }
    }
};

//审判长的审判定锤会让很多人的状态变化,去执行需要执行的操作
//如记者会快速写文章抓第一条信息等等
//而在实际中,可能会自己重写一些遍历或者添加一些条件来进行不同
//人员对同一个事务变化而会执行的不同操作
class CJudge :public CSomeThing
{
public:
    void toDoSomething()
    {
        cout << "这个案子的判决是:无罪." << endl;
        toUpdate();
    }
};

int main()
{
    CSomeThing *thing = new CJudge();
    CNewsPerson *person = new CPaperPerson();
    thing->addNewsPerson(person);
    thing->toDoSomething();
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PaddleOCR在医疗票据识别中的实战:从部署到业务字段提取 本文详细介绍了PaddleOCR在医疗票据识别中的实战应用,重点阐述了其离线部署方案与PP-OCRv3模型选型优势。针对医疗票据敏感数据不出本地的合规要求,文章提供了从环境搭建、模型配置到核心字段提取策略的完整流程,并分享了性能优化与系统集成的实践经验,有效解决了医疗票据自动化录入的难题。 阅读详情

相关推荐

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 309

CocosCreator简单使用全局观察者模式进行节点事件派送与监听

最近做的农场游戏,一些界面变动(金币变动,或者一些操作等)都是通过查找节点得到挂载的脚本组件来控制界面的内容显示,而creator的监听和发射事件都是基于节点的.突发奇想会不会有全局的观察者模式来处理事件的监听和发射. 于是在论坛收到了jare回答的问题.根据回答就尝试了一下.于是有了本文的介绍,以便后来者方便使用. 首先把NotificationCenter做成全局的js脚本.这样就支持...

LANGZI7758521的专栏 1827

Livox MID-360与FAST-LIO2实战:从驱动部署到参数调优的完整指南

激光雷达惯性里程计(LIO)是机器人定位与建图(SLAM)领域的核心技术,它通过紧耦合融合激光雷达点云与惯性测量单元(IMU)数据,实现高精度、低漂移的位姿估计。其核心原理在于利用IMU的高频数据预测运动,并用激光雷达的精确测距信息进行校正与优化,从而在快速运动或特征缺失场景下保持鲁棒性。这项技术的工程价值在于为自动驾驶、移动机器人及三维重建提供了可靠的前端里程计解决方案。针对Livox MID-360固态雷达与FAST-LIO2这一热门组合,其应用场景广泛覆盖了室内外导航与地图构建。本文聚焦于**驱动部署

weixin_29997523的博客 445

观察者模式(ObserverPattern)

定义 定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependence)模式。 结构图 角色与理解 观察者模式共分为四种角色: Subject(目标类):被观察的对象,内部定义一个观察者集合,并提供管理方法,定义通知方法notify()。 ConcreteSubjec.

码农架构 1267

一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通

晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。

学习帮的博客 9万+

日语五十音图速记攻略:从形象联想法到实战训练

语言学习中的记忆编码与条件反射构建是高效掌握基础的关键。其核心原理在于通过将抽象符号与具象图像、故事或已知概念关联,利用大脑对视觉和叙事信息的天然高记忆效率,从而降低认知负荷,加速识别与反应速度。这一方法的技术价值在于将机械重复转化为意义联结,显著提升长期记忆的牢固度与提取速度。在日语学习这一具体应用场景中,五十音图作为表音文字系统,正是实践这一记忆技术的绝佳对象。通过系统化的形象联想、分组对比(如平假名与片假名的对应关系)以及间隔重复的实战训练,学习者可以高效攻克这一入门难关,为后续的词汇、语法学习铺设坚

weixin_29032489的博客 378

设计模式——行为型——观察者模式ObserverPattern

https://en.wikipedia.org/wiki/Observer_pattern

bbllbbcpt的专栏 304

ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol

本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。

weixin_30275415的博客 212

观察者模式(ObserverPattern)

观察者模式(ObserverPattern) 观察者模式又被叫做发布订阅(Publish/Subscribe)模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使他们都自动更新自己 委托就是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托方法的使用可以像其他任何方法一样,具有参数和返回值,委托可以看做对函数的抽象,是函数的类,委托的实例将代表一个具体的函数 模式动机 建立一种对象与对象之间的

Sharker_Blog的博客 450

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

Cadence17.4 PCB位号重排与反标比Cadence16版本更简单一些,那到底如何操作?

一点硬件 1181

设计模式之观察者模式(ObserverPattern)

设计模式之观察者模式(ObserverPattern) 文章目录设计模式之观察者模式(ObserverPattern)一.观察者模式(ObserverPattern)二.编程实例1.进制转换器2.客人敲门案例 一.观察者模式(ObserverPattern) 在生活中会遇到很多使用观察者模式的案例,比如股票跌涨后,股民作为观察者会对股票进行交易;客人来敲门,门铃响了之后管家就会去开门等等。其中观...

Worthy_Wang的博客 622

华为OD机考双机位C卷 - 区间交集(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 区间交集

算法大师! 1136

设计模式之ObserverPattern观察者模式

现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。 在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、柱状图之间的关系;MVC 模式中的模型与视图的关系。所有这些,如果用观察者模式来实现就非常方便。 观察者Observer模式的特点和定义: 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一

haoyuegongzi的博客 326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

设计模式之观察者模式

观察者模式(Observer Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)。它是一种行为设计模式,允许对象之间建立一种一对多的依赖关系,这样当一个对象状态改变时,它的所有依赖者(观察者)都会收到通知并自动更新。

老码农的博客 2158

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

观察者模式 ObserverPattern

using System; using System.Collections; using System.Collections.Generic; abstract class PaperBusiness { ArrayList customerList=new ArrayList(); public void addCustomer(customer customer

GhostHouse 1320

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

设计模式之观察者模式ObserverPattern(十一)

观察者模式 (Observer Pattern) 是一种行为型设计模式,又被称为发布-订阅 (Publish/Subscribe) 模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。

徐泗空的博客 1047

观察者模式之自己实现(ObserverPattern)

观察者模式:在对象之间建立一对多的关系,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。 因为继承java.util.Observable和java.util.Observer已经介绍过了,今天我们介绍一个自己实现的观察者模式。上代码: “主题”接口,负责增加、删除“观察者”,还有发布消息。public interface Subject { publi

386

设计模式-观察者模式

观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下。本文以AbstractCursor为例子,展开分析。观察者模式,Observer Pattern,是一个很实用的模式,本人曾经接触到的各种平台以及曾经参与项目中打印模板解释器中都用到了此模式。 1.意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知...

weixin_34268843的博客 285

观察者模式(Observer Pattern)

    观察者模式是对象的行为模式,又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 类图: 示例一: 1、结构   2、java代码 Subject接口: package obse...

qq_26880671的博客 128

C#设计模式:观察者模式(Observer Pattern)

一,什么是观察者模式(Observer Pattern)? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象 二,代码如下: 在一开始我们先定义两个类,一个是Chinese类(被观察者) ,另一个是Jan类(观察者),观察者设计模式是当被观察者状态发生改变,从而触发观察者的事件 using Sy...

dcujcivw769565的博客 174

ObserverPattern(观察者模式)

import java.util.ArrayList; import java.util.List; /** * 观察者模式 * @author TMAC-J * 牵一发而动全身来形容观察者模式在合适不过了 * 分为拉模式和推模式,这里不详细说了 */ public class ObserverPattern { interface IObs...

weixin_30399821的博客 103

设计模式——观察者模式(ObserverPattern)

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

雪夜&流星的专栏 519
上一篇: 命令模式
下一篇: 解释器模式
PandaCreater
博客等级 码龄6年 6粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值