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

这篇具有很好参考价值的文章主要介绍了用C++11打造智能观察者模式:详解实现步骤完整示例代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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

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

下面是对上述步骤的更详细的讲解:

步骤 1:定义观察者接口

// Observer.h
#pragma once

class 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。最后,在客户端代码中,我们创建了具体的主题和观察者对象,将观察者添加到主题中,并演示了状态变化时如何通知观察者,以及如何移除观察者。

 

用C++11打造智能观察者模式:详解实现步骤完整示例代码文章来源地址https://www.toymoban.com/news/detail-823484.html

到了这里,关于用C++11打造智能观察者模式:详解实现步骤完整示例代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用23种设计模式打造一个cocos creator的游戏框架----(十四)观察者模式

    模式名称:观察者模式 模式分类:行为型 模式意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 结构图: 适用于: 1、当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在

    2024年02月04日
    浏览(49)
  • 【C++ 观察者模式 思想理解】C++中的观察者模式:松耦合设计与动态交互的艺术,合理使用智能指针观察者

    在进入技术细节之前,理解观察者模式(Observer Pattern)的基本概念和它在现代编程中的重要性是至关重要的。 观察者模式是一种设计模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。在C++中,这个

    2024年01月24日
    浏览(54)
  • 【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    观察者模式(Observer Pattern)是一种行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject对象带有绑定观察者到Client对象和从Client对象解绑观察

    2023年04月21日
    浏览(78)
  • Unity 观察者模式(实例详解)

    在Unity中实现观察者模式,我们可以创建一个Subject(目标/主题)类,它负责维护订阅者列表,并且当其状态改变时通知所有观察者。下面通过5个代码示例来详细展示如何在Unity C#脚本中应用观察者模式: 示例1 - 简单的文本更新通知 示例2 - 多观察者监听游戏分数变化 示例

    2024年02月21日
    浏览(28)
  • 【设计模式】第十二章:观察者模式详解及应用案例

    【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章:装饰器模式 【设计模式】第七章:代理模式 【设计模式

    2024年02月13日
    浏览(40)
  • Java设计模式-观察者模式-SpringBoot实现

    项目:https://gitee.com/KakarottoChen/blog-code.git 的:JavaSpringListener Java观察者模式是一种设计模式,用于实现对象之间的一对多依赖关系。在观察者模式中,当一个对象的状态发生变化时,它的所有依赖对象(观察者)都会自动收到通知并进行相应的更新。 观察者模式由以下几个核

    2024年02月08日
    浏览(36)
  • JavaScript 简单实现观察者模式和发布-订阅模式

    大家好,我是南木元元,热衷分享有趣实用的文章。今天来聊聊设计模式中常用的观察者模式和发布-订阅模式。 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 如何理解这句话呢?来举个生活中的例子

    2024年02月12日
    浏览(88)
  • Go和Java实现观察者模式

    在监控系统中,我们需要采集监控指标的信息,假设当采集的指标信息超过阈值时我们需要对该监控指标持久化到 数据库中并且进行告警。 本文通过指标采集持久化和告警来说明观察者模式的使用,使用Go语言和Java语言实现。 观察者模式是一种行为型设计模式,它定义了一

    2024年02月16日
    浏览(33)
  • 「观察者(Observer)」设计模式 Swift实现

    观察者设计模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会受到通知并自动更新。 在这种模式中,被观察者对象(Subject)存储其观察者对象(Observer)列表,并提供了用

    2024年02月16日
    浏览(37)
  • ts:简单实现 mobx 的观察者模式 observable

    mobx 状态管理器 订阅者: 管理 变化后 回调的函数列表 观察者:将传入的 数据监听 起来,并且在 有变化时 , 执行 订阅者管理的 函数列表

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包