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

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

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

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

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

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

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

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

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

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

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

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

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 华为Mate60系列模具曝光:采用硕大圆形后置相机模组+拼接配色方案

    据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将迎来更新,有望在9-10月份带来全新的华为Mate60
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top