《观察者模式(极简c++)》

        本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


模式说明

  • 方案:观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。它包括两个关键角色:主题(Subject)和观察者(Observer)。主题负责维护一组观察者,并通知它们状态的变化。观察者订阅主题,并在主题状态变化时得到通知并进行相应的更新。
  • 优点:降低了对象之间的耦合度,使得对象之间的交互更加灵活。可以轻松地添加新的观察者,而不需要修改主题。
  • 缺点:如果观察者数量过多,可能会导致性能下降。

本质思想: 观察者模式的本质是将对象之间的依赖关系从硬编码的方式转变为松耦合的方式,使得对象之间能够动态地交互。

实践建议:一种软件内部模块之间的异步通知方式之一。十分好用,在软件系统中十分常见。

代码示例

#include <iostream>
#include <vector>

// 观察者接口
class Observer {
public:
    virtual void update() = 0;
};

// 主题类
class Subject {
public:
    void attach(Observer* observer) {
        observers_.push_back(observer);
    }

    void detach(Observer* observer) {
        // 省略了从观察者列表中删除指定观察者的逻辑
    }

    void notify() {
        for (auto observer : observers_) {
            observer->update();
        }
    }
private:
    std::vector<Observer*> observers_;
};

// 具体观察者类
class ConcreteObserver : public Observer {
public:
    void update() override {
        std::cout << "Observer updated" << std::endl;
    }
};

int main() {
    // 创建主题和观察者
    Subject subject;
    ConcreteObserver observer;

    // 订阅主题
    subject.attach(&observer);

    // 主题状态改变,通知观察者
    subject.notify();

/*
输出:Observer updated
*/

    return 0;
}

相关推荐

  1. 观察模式c++)》

    2024-04-06 06:08:10       32 阅读
  2. 《建造模式c++)》

    2024-04-06 06:08:10       47 阅读
  3. 《访问模式c++)》

    2024-04-06 06:08:10       40 阅读
  4. 模版模式c++)》

    2024-04-06 06:08:10       34 阅读
  5. C# 观察模式

    2024-04-06 06:08:10       51 阅读
  6. 观察模式-C#

    2024-04-06 06:08:10       29 阅读
  7. 《工厂模式c++)》

    2024-04-06 06:08:10       43 阅读
  8. 《原型模式c++)》

    2024-04-06 06:08:10       57 阅读
  9. 《过滤器模式c++)》

    2024-04-06 06:08:10       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 06:08:10       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 06:08:10       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 06:08:10       87 阅读
  4. Python语言-面向对象

    2024-04-06 06:08:10       96 阅读

热门阅读

  1. 逻辑回归(Logistic Regression)详解

    2024-04-06 06:08:10       34 阅读
  2. 课时86:流程控制_函数基础_函数退出

    2024-04-06 06:08:10       40 阅读
  3. 提升写作效率:ChatGPT助力学术论文撰写

    2024-04-06 06:08:10       36 阅读
  4. 详解Qt中的容器

    2024-04-06 06:08:10       35 阅读
  5. Qt基本控件

    2024-04-06 06:08:10       30 阅读
  6. centos 7 MySQL 离线一键自动安装脚本

    2024-04-06 06:08:10       35 阅读
  7. 空和null是两回事

    2024-04-06 06:08:10       34 阅读
  8. linux模糊删除文件命令

    2024-04-06 06:08:10       37 阅读
  9. 【QT教程】QML与C++的交互

    2024-04-06 06:08:10       30 阅读