当前位置:首页 > 科技  > 软件

用C++11打造智能观察者模式:详解实现步骤完整示例代码

来源: 责编: 时间:2024-04-08 08:57:54 244观看
导读观察者模式是一种行为设计模式,其中一个对象(主题)维护其依赖对象(观察者)的列表,当主题的状态发生变化时,它通知所有观察者。以下是一个使用C++11实现观察者模式的简单例子:定义观察者接口(Observer): 创建一个观察者接口,该接口

RQr28资讯网——每日最新资讯28at.com

观察者模式是一种行为设计模式,其中一个对象(主题)维护其依赖对象(观察者)的列表,当主题的状态发生变化时,它通知所有观察者。以下是一个使用C++11实现观察者模式的简单例子:RQr28资讯网——每日最新资讯28at.com

  • 定义观察者接口(Observer): 创建一个观察者接口,该接口包含观察者需要实现的更新方法。这个接口可以包含其他方法,但更新方法是必须的。
  • 创建具体观察者类: 实现观察者接口的具体类。每个具体观察者类都应该实现更新方法,该方法定义了在主题状态变化时观察者应该执行的操作。
  • 定义主题接口(Subject): 创建一个主题接口,该接口包含了添加、移除和通知观察者的方法。这里可以选择在主题接口中定义更新状态的方法,也可以在具体主题类中定义。
  • 创建具体主题类: 实现主题接口的具体类。该类应该维护一个观察者列表,并在状态变化时通知所有观察者。
  • 实现客户端代码: 在客户端代码中创建具体的主题和观察者对象,将观察者添加到主题中。客户端还负责触发主题状态的变化,从而通知观察者。

下面是对上述步骤的更详细的讲解:RQr28资讯网——每日最新资讯28at.com

步骤 1:定义观察者接口

// Observer.h#pragma onceclass Observer {public:    virtual void update(int data) = 0;};

步骤 2:创建具体观察者类

// ConcreteObserverA.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverA : public Observer {public:    void update(int data) override {        std::cout << "Observer A 收到更新,数据为: " << data << std::endl;    }};
// ConcreteObserverB.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverB : public Observer {public:    void update(int data) override {        std::cout << "Observer B 收到更新,数据为: " << data << std::endl;    }};

步骤 3:定义主题接口

// Subject.h#pragma once#include "Observer.h"class Subject {public:    virtual void addObserver(Observer* observer) = 0;    virtual void removeObserver(Observer* observer) = 0;    virtual void notifyObservers(int data) = 0;};

步骤 4:创建具体主题类

// ConcreteSubject.h#pragma once#include <vector>#include "Subject.h"class ConcreteSubject : public Subject {private:    std::vector<Observer*> observers;    int data;public:    void addObserver(Observer* observer) override {        observers.push_back(observer);    }    void removeObserver(Observer* observer) override {        observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());    }    void notifyObservers(int data) override {        for (Observer* observer : observers) {            observer->update(data);        }    }    void setData(int newData) {        data = newData;        notifyObservers(data);    }    int getData() const {        return data;    }};

步骤 5:实现客户端代码

// main.cpp#include "ConcreteObserverA.h"#include "ConcreteObserverB.h"#include "ConcreteSubject.h"int main() {    ConcreteSubject subject;    ConcreteObserverA observerA;    ConcreteObserverB observerB;    subject.addObserver(&observerA);    subject.addObserver(&observerB);    subject.setData(123);    subject.removeObserver(&observerA);    subject.setData(456);    return 0;}

在这个例子中,我们创建了抽象观察者类 Observer,具体观察者类 ConcreteObserverA  ConcreteObserverB。然后,我们定义了抽象主题类 Subject 和具体主题类 ConcreteSubject。最后,在客户端代码中,我们创建了具体的主题和观察者对象,将观察者添加到主题中,并演示了状态变化时如何通知观察者,以及如何移除观察者。RQr28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-81867-0.html用C++11打造智能观察者模式:详解实现步骤完整示例代码

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 掌握.Net桌面开发的精髓之一:句柄,一种特殊的数据类型

下一篇: 如果你还不理解 RBAC,看看 Jenkins 如何做到的

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
Top