当前位置: 首页 > article >正文

回调机制实现观察者模式

观察者设计模式,允许对象在状态变化时通知其他依赖对象,通常通过回调函数实现。

在回调机制中,可以注册多个回调函数,以便在特定事件发生时依次调用它们。下面是一个示例,展示如何在 C++ 中实现一个简单的事件管理器,支持注册多个回调函数。

#include <iostream>
#include <vector>
#include <functional>

class EventManager {
public:
    using EventCallback = std::function<void(int)>; // 定义回调函数类型

    // 注册回调函数
    void subscribe(EventCallback callback) {
        callbacks.push_back(callback);
    }

    // 触发事件,调用所有注册的回调函数
    void triggerEvent(int value) {
        for (const auto& callback : callbacks) {
            callback(value); // 调用每个回调函数
        }
    }

private:
    std::vector<EventCallback> callbacks; // 存储所有注册的回调函数
};

// 示例回调函数
void callbackA(int value) {
    std::cout << "Callback A received value: " << value << std::endl;
}

void callbackB(int value) {
    std::cout << "Callback B received value: " << value << std::endl;
}

void callbackC(int value) {
    std::cout << "Callback C received value: " << value << std::endl;
}

int main() {
    EventManager manager;

    // 注册多个回调函数
    manager.subscribe(callbackA);
    manager.subscribe(callbackB);
    manager.subscribe(callbackC);

    // 触发事件,所有注册的回调函数将被调用
    manager.triggerEvent(42); // 示例值

    return 0;
}

 在实现观察者模式时,主题对象(Subject)可以注册多个观察者(Observer),当状态变化时,主题会调用所有观察者的回调函数。


http://www.kler.cn/a/467064.html

相关文章:

  • wordpress右侧浮动咨询台插件
  • NoSQL简介
  • 25年对AI产业的25点预测以及展望思考
  • weblogic安装 12.2.1.4.0 单机
  • uniapp中判断设备类型
  • 2025/1/1 路由期末复习作业二
  • 什么是索引
  • PyTorch FlexAttention技术实践:基于BlockMask实现因果注意力与变长序列处理
  • SMMU软件指南之系统架构考虑
  • 【玩转全栈】----Django连接MySQL
  • Verilog语法之generate与genvar用法
  • maven 打包时优先选择本地仓库
  • 小程序学习06——uniapp组件常规引入和easycom引入语法
  • VSCode设置ctrl或alt+mouse(left)跳转
  • 计算机毕业设计Python+Spark中药推荐系统 中药识别系统 中药数据分析 中药大数据 中药可视化 中药爬虫 中药大数据 大数据毕业设计 大
  • 网络攻击原理与常用方法
  • 启航数据结构算法之雅舟,悠游C++智慧之旅——线性艺术:顺序表之细腻探索
  • 仿生的群体智能算法总结之三(十种)
  • 【数据结构-单调队列】力扣1438. 绝对差不超过限制的最长连续子数组
  • 链表算法练习
  • Arduino Uno简介与使用方法
  • 如何逐步操作vCenter修改DNS服务器?
  • React 中的受控组件与非受控组件:深度剖析与实战应用
  • 微服务拆分的艺术:构建高效、灵活的系统架构
  • 清华发布Hyper-YOLO:超图计算+目标检测!捕捉高阶视觉关联
  • spring默认线程池SimpleAsyncTaskExecutor特点为什么要尽量避免使用