2.C++设计模式 - 观察者模式

2023-11-17

class Observer {
public:
	//构造
	Observer(){ }
	//析构
	virtual ~Observer(){ }
	//更新
	virtual void updata(){ }
};

class Server {
private:
	//观察者链表
	list<Observer*> m_Observer;

protected:
	//服务器状态
	string m_Status;

public:
	//构造函数
	Server(){ }
	//析构函数
	virtual ~Server(){ }
	//添加观察者
	void Attach(Observer* observer) {
		this->m_Observer.push_back(observer);
	}
	//移除观察者
	void Remove(Observer* observer) {
		this->m_Observer.remove(observer);
	}
	//设置服务器状态
	virtual void SetStatus(string s){ }
	//获取服务器状态
	virtual string GetStatus() {
		return this->m_Status;
	}
	//通知观察者
	void Notify() {
		for (list<Observer*>::iterator iter = this->m_Observer.begin();iter != m_Observer.end(); iter++) {
			(*iter)->updata();
		}
	}
};
//具体服务器
class Concrete_Server : public Server {
private:
	//用户名称
	string m_Name;
public:
	//构造
	Concrete_Server(string name) {
		this->m_Name = name;
	}
	//析构
	~Concrete_Server(){ }
	//设置服务器状态
	virtual void SetStatus(string s) { 
		this->m_Status = "("+this->m_Name+")"+s;
	}
	//获取服务器状态
	virtual string GetStatus() {
		return this->m_Status;
	}
};

//具体观察者
class Concrete_Observer : public Observer {
private:
	//观察者名称
	string m_Name;
	//需要观察的服务器
	Server* m_Server;
public:
	//构造
	Concrete_Observer(string name, Server* server) {
		this->m_Name = name;
		this->m_Server = server;
	}
	//析构
	~Concrete_Observer(){ }
	//更新
	virtual void updata() {
		cout << this->m_Name << ": " << this->m_Server->GetStatus() << endl;
	}
};
void test() {
	Server* server1 = new Concrete_Server("服务器1");

	Observer* observer1 = new Concrete_Observer("观察者1", server1);
	Observer* observer2 = new Concrete_Observer("观察者2", server1);
	server1->Attach(observer1);
	server1->Attach(observer2);
	server1->SetStatus("2.1.0.001更新系统");
	server1->Notify();

	delete server1;
	server1 = NULL;
	delete observer1;
	observer1 = NULL;
}


int main()
{
	test();
	system("pause");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.C++设计模式 - 观察者模式 的相关文章

  • JSON.Net 反序列化返回“null”

    我正在使用 JSON Net 反序列化 JSON 字符串 JSON 字符串是 string testJson Fruits Apple color red size round Orange Pro
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 为什么不能调用带有 auto& 参数的 const mutable lambda?

    include
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 浮点字节序?

    我正在为实时海上模拟器编写客户端和服务器 并且由于我必须通过套接字发送大量数据 因此我使用二进制数据来最大化可以发送的数据量 我已经了解整数字节顺序以及如何使用htonl and ntohl为了规避字节顺序问题 但我的应用程序与几乎所有模拟
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void

随机推荐

  • 解决 windows 下浏览器无法上网,QQ/微信正常上网

    解决 windows 下浏览器无法上网 QQ 微信正常上网 解决 windows 下浏览器无法解析DNS配置 gt 注意 本处只 提供一种解决思路 并不代表所有问题都能被解决 可以尝试一下 这种问题 一般在浏览器中会 直奔主题 原因 1 查
  • 计算机视觉(十二):Mask R-CNN

    1 引言 Mask R CNN是在Faster R CNN架构为基础上改进的一种目标检测架构 并且能够有效的完成高质量的语义分割 Mask R CNN主要结构如下图所示 那我们就来一步步介绍Mask R CNN的部分 2 特征提取方法 通过
  • aps是什么意思_aps是什么意思

    aps的意思是 1 美国物理学会 全称 American Physical Society 2 人名 短语 APS Assembly空气加压系统 APS Automated Packaging Systems自动封装系统 例句 1 I re
  • win10环境下PCL安装和配置回顾(一)

    2020年博主有写过几篇关于PCL的博客 这边想先回顾下 再增加点新内容 之前写的博客专栏如下链接 https blog csdn net jiugeshao category 11993239 html spm 1001 2014 300
  • 基于FPGA的频率计设计

    文章目录 写在前面 1 什么是频率计 2 测量方法与基本原理 3 待测信号如何输入FPGA 一 实验程序 1 RTL图 2 Verilog 参考设计 3 指派引脚 二 调试验证 输入不同频率的方波 写在前面 1 什么是频率计 频率计是一种专
  • 正则表达式用ajax怎么写,使用AJAX(包含正则表达式)验证用户登录的步骤

    我们来分一下步骤吧 1 HTML代码 页面先写出来 2 正则表达式验证输入的用户名密码是否正确 失去焦点验证 3 Ajax异步提交 4 servlet这是后台处理代码获取数据并对比响应 然后跳转成功页面 效果图 结构 代码如下 table
  • TensorFlow 的基本概念和使用场景

    TensorFlow 是一个热门的机器学习框架 由 Google 开发 用于构建和训练神经网络和其他机器学习模型 下面是 TensorFlow 的基本概念和使用场景 基本概念 1 张量 Tensor 是 TensorFlow 中的基本数据结
  • 防止运营商劫持apk

    title 防止运营商劫持apk tags https upyun apk 运营商 劫持 categories 工作日志 date 2017 05 25 18 18 56 目前f6部分系统使用了upyun的服务 包含apk的下载和静态资源等
  • Exception常见异常类型和处理机制

    Exception 意外异常 异常层次结构的父类 Throwable 是异常Exception与Error的父类 直接继承自Object Error通常指系统发生的严重性的错误 不能通过程序代码解决的问题 Exception异常可以通过修改
  • 在ipad任意界面都可以写字_不再泡面!大学生如何用iPad高效学习

    如果你还是一个学生 相信平时上课记笔记一定是最头疼的问题 平时的笔记期末就不见了等等 用电子的方式记录就可以完美解决这个问题 而目前比较推崇 流行的方式就是使用iPad Apple Pencil的组合 书写的感觉也接近纸质 但同样的 你也需
  • 多层嵌套的 javabean转化为xml时 更改嵌套的属性名称时 报错重复

    我们先来看下报错 如果需要给多层嵌套javabean 转化为xml时 转化的标签名字不符 我们需要该怎么做呢 不是多层嵌套的我们可以直接使用 XmlElement name 来进行别名 如果多层的话 我们则需要给在每个路过的类上都需要加上
  • 公众号H5开发如何在本地调试

    1 设置本地hosts的地址映射 如blog test com映射127 0 0 1 方法 修改hosts的地址映射 使域名解析到指定IP 2 配置公众号网页授权获取用户基本信息 3 修改vue配置 vue cli3创建的项目 在项目根目录
  • 【PLC 课程设计】花式喷泉

    花式喷泉的控制 要求 按下启动按钮 喷泉装置开始工作 按下停止按钮 喷泉装置停止工作 喷泉的工作方式由花式选择开关和单步 连续开关决定 当单步 连续开关在单步位置时 喷泉只能按照花样选择开关设定的方式运行一个循环 花样选择开关用于选择喷泉的
  • 从零实现DevOps(四):Jenkins+GitLab自动化部署SpringBoot项目(Jenkins本地环境+Jar包模式)

    从前三篇文章中 我们已经实现了gitlab jenkins项目的安装与基础配置 并且给Centos7操作系统搭配了jdk maven等环境变量 从这边文章起 从零实现DevOps 系列 将正式开始利用Jenkins Gitlab的完美结合
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • elasticsearch query 要点

    查看分析效果 godproduct analyze analyzer ik smart text 雅诗兰黛眼霜 简单filter查询 POST myindex mytype search query bool filter term use
  • 常用Web安全扫描工具合集

    初入门时 喜欢将目标站点直接丢扫描器 慢慢等扫描结果 极度依赖Web扫描器 而有一些漏洞高手 善于运用运用各种工具但并不依赖工具 经常可以找到扫描工具发现不了的漏洞 一款好用的Web扫描器对于白帽子来说 就像剑客手中的剑一样重要 那么 如何
  • python os.walk不递归_python-os.walk目录递归

    递归删除文件或目录 递归 os walk 删除目录 shutil rmtree 1 coding UTF 8 2 importos path sys shutil3 4 path H test 5 6 7 for root dirs fil
  • 敏捷之旅大连站2012第一次筹备会议记录

    昨天召集了敏捷之旅大连站的几位组织者 一起开了一个筹备的讨论会 简单记录如下 1 地点的讨论 目前有几个地点备选 东软会议中心 腾飞软件园的会议厅 中荷人寿会议室以及酒店 综合各种因素 包括地点的交通 午餐的方便程度 场地的大小 音响和投影
  • 2.C++设计模式 - 观察者模式

    class Observer public 构造 Observer 析构 virtual Observer 更新 virtual void updata class Server private 观察者链表 list