观察者模式C++

2024-09-07 07:58
文章标签 c++ 模式 观察者

本文主要是介绍观察者模式C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当对象间存在一对多的关系,当状态改变时,其他对象都得到通知,这就是观察者模式了。

观察者模式实现发布-订阅功能。如我们有个项目叫NGI,需要召开StanUp会议,会议上需求变更时需要通过所有参加会议的人员,我们就可以使用观察者模式,其UML图如下:
这里写图片描述
其代码实现如下:

#include <iostream>
#include <list>
#include <string>
using namespace std;class Observer
{
public:Observer(){}virtual ~Observer(){}virtual void Update(){}
};class Meeting
{
private:list<Observer*> m_obser;
protected:string  m_state;
public:Meeting(){}virtual ~Meeting(){}void Attach(Observer* obser){m_obser.push_back(obser);}void Remove(Observer* pObser){m_obser.remove(pObser);}void Notify(){list<Observer*>::iterator iter;for (iter = m_obser.begin(); iter != m_obser.end(); iter++){(*iter)->Update();}}virtual void SetStatus(string s) { m_state = s; }virtual string GetStatus(void) { return m_state; }
};class StanUpMeeting : public Meeting
{
private:string m_name;
public:StanUpMeeting(string name) :m_name(name) {}~StanUpMeeting(){}void SetStatus(string s) { m_state = "StanUp Meeting Notify :" + m_name + s; }string GetStatus() { return m_state; }
};class NgiObserver :public Observer
{
private:string m_name;Meeting* m_meeting;
public:NgiObserver(string name, Meeting* meeting):m_name(name), m_meeting(meeting){}~NgiObserver() {}void Update(){string status = m_meeting->GetStatus();cout << m_name << "******" << status << endl;}
};int main(int argc, char** argv)
{Meeting *meeting = new StanUpMeeting("PM:");Observer *observer = new NgiObserver("Clark", meeting);meeting->Attach(observer);meeting->SetStatus("NGI Projrct requirment changed");meeting->Notify();delete meeting; delete observer;return 0;
}

以上代码在VS2015上运行通过。

这篇关于观察者模式C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144503

相关文章

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M