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

设计模式-观察者模式

设计模式-观察者模式

  • 前言
  • 观察者模式

前言

由于作者做的C++开发比较多所以本文实例都以C++语言方式给出。

观察者模式

// 观察者接口
class Observer {
public:virtual ~Observer() = default;virtual void update(const std::string& message) = 0;
};// 主题接口
class Subject {
public:virtual ~Subject() = default;virtual void attach(Observer* observer) = 0;virtual void detach(Observer* observer) = 0;virtual void notify(const std::string& message) = 0;
};// 具体主题实现
class ConcreteSubject : public Subject {
private:std::vector<Observer*> observers_;public:void attach(Observer* observer) override {observers_.push_back(observer);}void detach(Observer* observer) override {observers_.erase(std::remove(observers_.begin(), observers_.end(), observer), observers_.end());}void notify(const std::string& message) override {for (Observer* observer : observers_) {observer->update(message);}}
};// 具体观察者实现
class ConcreteObserver : public Observer {
private:std::string name_;public:explicit ConcreteObserver(const std::string& name) : name_(name) {}void update(const std::string& message) override {std::cout << name_ << " received message: " << message << std::endl;}
};

观察者模式的核心概念:Subject维护观察者列表,当状态变化时通知所有观察者。代码包含主题接口、具体主题、观察者接口和具体观察者实现。
主题提供一些状态或者功能信息回调给观察者,可以有多个观察者观察同一个主题。上面例子中通过attach接口向主题注册观察者指针,通过detach接口取消注册观察者指针,主题通过notify接口通知所有观察者信息。

http://www.lqws.cn/news/580537.html

相关文章:

  • Linux 系统管理:高效运维与性能优化
  • MAC电脑,在 Docker 中已经运行过一次 Oracle 镜像后,再次运行具体操作。
  • pytorch底层原理学习--计算图
  • 【WCF】通过AOP实现基于JWT的授权与鉴权的实践
  • LG 将正式终止手机相关服务,彻底告别手机市场
  • 云手机主要是指什么?
  • static线程安全
  • 10.【C语言学习笔记】指针(二)
  • 汉字田(第十五届蓝桥杯大赛软件赛国赛)
  • 生成式人工智能实战 | 变分自编码器(Variational Auto-Encoder, VAE)
  • zxing-cpp c++版本的编译
  • 【T2I】RB: REGION AND BOUNDARY AWARE ZERO-SHOT GROUNDED TEXT-TO-IMAGE GENERATION
  • RK3588高性能处理器核心技术解析
  • 从0开始学习计算机视觉--Day06--反向传播算法
  • chatshare最新激活码分享
  • OpenCV计算机视觉实战(14)——直方图均衡化
  • Windows环境下Docker容器化的安装与设置指南
  • MySQL DATETIME 类型时间精度陷阱:一次由毫秒引发的数据“消失”之谜
  • 计算机网络第一章——计算机网络体系结构
  • Pandas5(数据清洗1)——缺失值处理、数据去重/转换/替换、离散化/分箱、检测和过滤异常值
  • 【Kafka】docker 中配置带 Kerberos 认证的 Kafka 环境(全过程)
  • NIO 工作原理
  • C++ cstring 库解析:C 风格字符串函数
  • 【甲方安全建设】SDL基线建设及审计评估
  • API接口安全-2:签名、时间戳与Token如何联手抵御攻击
  • 【第二章:机器学习与神经网络概述】04.回归算法理论与实践 -(1)线性回归模型
  • Web攻防-SSRF服务端伪造功能逻辑SRC实践复盘参数盲测自动化检测流量插件
  • 【ArcGISPro】解决Pro不能导入AppData下的site-packages
  • MySQL数据库--SQL DDL语句
  • 大学专业科普 | 云计算、大数据