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

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

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

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

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

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

下面是对上述步骤的更详细的讲解:QNv28资讯网——每日最新资讯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。最后,在客户端代码中,我们创建了具体的主题和观察者对象,将观察者添加到主题中,并演示了状态变化时如何通知观察者,以及如何移除观察者。QNv28资讯网——每日最新资讯28at.com

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

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

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

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

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 2023年,我眼中的字节跳动

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

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对&ldquo;势&rdquo;的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 郭明錤称华为和江淮汽车合作开发问界MPV,定价100万左右、计划明年量产

    8 月 1 日消息,郭明錤今天在 Medium 平台发布博文,称华为正在和江淮汽车合作,开发售价在 100 万元的问界 MPV,预计在 2024 年第 2 季度量产,销量目标为
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top