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

设计模式 观察者模式

目录

1. 定义

2. 应用场景


1. 定义

对象间的一种一对多的依赖关系, 以便当一个对象的状态发生改变时, 所有依赖他的对象都得到通知并自动更新.

2. 应用场景

"一" 对 "多" 的依赖关系, "一" 变化 "多" 跟着变化.

现在有这样的一个场景: 我们有一个 数据中心 和 多个显示设备 场景.

代码结构:

观察接口

多个观察者类 继承自 观察接口

客户类通过 容器 组合 所有的观察者类(基类指针)

class IDisplay
{
public:virtual void show(float temprature) = 0;virtual ~IDisplay() {}
};
class DisplayA : public IDisplay
{
public:virtual void show(float temprature){std::cout << "DisplayA Show" << std::endl;}
};
class DisplayB : public IDisplay
{
public:virtual void show(float temprature){std::cout << "DisplayB Show" << std::endl;}
};
class DateCenter
{
public:void Attach(IDisplay* ob){}void Detach(IDisplay* ob){}void Notify(){double d = 1.0;for (auto& ob : obs){ob->show(d);}}
private:std::list<IDisplay*> obs;
};
int main()
{DateCenter* DC = new DateCenter();IDisplay* Da = new DisplayA();DC->Attach(Da);IDisplay* Db = new DisplayB();DC->Attach(Db);// DC 发生变化DC->Notify();
}
http://www.xdnf.cn/news/17148.html

相关文章:

  • 软件测试中,pytest 的 yield 有什么作用?
  • Day32--动态规划--509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
  • 第一个vue应用
  • 【性能测试】---测试工具篇
  • JavaSE---异常的经典面试题
  • Git `cherry-pick` 工具汇总
  • 数组指针-函数指针-回调函数
  • 大屏数据展示页面,数据可视化可以用到的框架和插件
  • docker启动出现Error response from daemon: Container的问题【已解决】
  • List、ArrayList 与顺序表
  • VSCode:基础使用 / 使用积累
  • shell基础之EOF的用法
  • React:受控组件和非受控组件
  • 2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算
  • 202506 电子学会青少年等级考试机器人六级实际操作真题
  • 简单介绍cgroups以及在K8s中的应用
  • copy_file_range系统调用及示例
  • CubeFS存储(一)
  • HTML应用指南:利用GET请求获取全国OPPO官方授权体验店门店位置信息
  • css优化、提升性能方法都有哪些?
  • LINUX-磁盘管理
  • 基于2025年《Science》期刊论文的科研图表Python绘制分析
  • 二、Envoy静态配置
  • Linux环境下部署SSM聚合项目
  • 阿里云polardb-x 2.0迁移至华为云taurusdb
  • 安卓雷电模拟器安装frida调试
  • BottomSheetDialogFragment 设置背景为透明无效果(解决方法)
  • antd组件select下拉数据分页加载
  • vcpkg: 一款免费开源的C++包管理器
  • 计算机网络:如何判断B或者C类IP地址是否划分了子网