首页 > 编程语言 >使用c++观察者模式完成主题订阅 消息通知

使用c++观察者模式完成主题订阅 消息通知

时间:2024-04-02 19:58:48浏览次数:27  
标签:订阅 string 主题 观察者 c++ obs Subject

//造主题,主题是默认的新闻主页,主题下面还有具体的频道:经济、体育、娱乐。这样主题也分为两个层,观察者可以订阅新闻主页,也可以订阅具体的频道。

//观察者模式
//抽象类 观察者
class AbsObserver
{
public:
    virtual void update(string content) = 0; //更新的接口
};
//主题类 发布者
class Subject
{
    string title;// 标题 
    list<AbsObserver*> obs;//容器存放观察者父类指针
public:
    Subject() {};
    Subject(string t) :title(t) {};
    virtual ~Subject() //回收所有观察者对象
    {
        if (obs.size() == 0)
        {
            return;
        }
        else
        {
            for (auto o : obs)
            {
                delete o; //回收堆内存
                obs.remove(o);//将指针从容器中移除
            }
        }
    }
    void attach(AbsObserver* someone) //将某个观察者加入订阅 加入list
    {
        obs.

标签:订阅,string,主题,观察者,c++,obs,Subject
From: https://blog.csdn.net/m0_67469586/article/details/137287184

相关文章

  • 代码随想录算法训练营DAY14|C++二叉树Part.1|二叉树的递归遍历、二叉树的迭代遍历、二
    文章目录二叉树的递归遍历思路CPP代码二叉树的迭代遍历思路前序遍历后序遍历后序遍历二叉树的统一迭代法二叉树的递归遍历144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历文章讲解:二叉树的递归遍历视频讲解:每次写递归都要靠直觉?这次带你学......
  • C++虚继承原理与类布局分析
    C++虚继承原理与类布局分析引言在开始深入了解虚继承之前,我们先要明白C++引入虚继承的目的。C++有别于其他OOP语言最明显的特性就是类的多继承,而菱形继承结构则是多继承中最令人头疼的情况。我们都知道,当派生类继承基类时,派生类内部会保存一份基类数据的副本。在D->B|C,B|C->A......
  • 【C++算法】 卡常技巧
    文章目录updata学习引言技巧1——善用修饰符技巧2——输入输出`read`和`write`技巧3——对于运算的优化技巧4——展开循环技巧5——对与循环的优化updata2024.03.31发布此文章学习引言卡常,一种编程技巧,在对时间复杂度要求很高时,就可以用这种办法来节省时......
  • c++蛮力法解释
    蛮力法(bruteforce)是一种基本的问题求解策略,也被称为穷举法。它的基本思想是通过穷举所有可能的解来寻找问题的解决方案。在C++中,可以使用循环和条件判断语句来实现蛮力法。下面是一个示例,假设要解决的问题是找到数组中两个数的和等于给定目标值的情况:#include<iostream>#i......
  • 在VS或者CLion中引入C和C++的SDK
    visualstudio创建c++项目引入头文件和库文件拷贝的gpt的,可以用在VisualStudio2022中,虽然你创建的是一个C++项目,但它确实支持C语言的编译和运行。为了在你的项目中使用C语言的头文件和库文件,你可以按照以下步骤操作:1.**添加头文件和库文件到项目:**-首先,你......
  • Vue3连接mqtt订阅消息
    Vue3中使用以及订阅没有安装可使用npminstallmqtt--save(暂时使用了[email protected])页面引入引用mqtt库不要直接引用mqtt会报错importmqttfrom'mqtt/dist/mqtt'代码:1.获取动态配置(关于mqtt的动态配置)<script>////引入mqttimportmqttfrom"mqt......
  • C++ std常用math函数
    std::atan和std::atan2std::atan(x)  即tan(angle)=x  所求angle范围[-PI/2,PI/2] [-90°,90°]std::atan2(y,x)即tan(angle)=y/x 所求angle范围[-PI,PI][-180°,180°]  std::fmod(x,y)计算x/y的浮点余数,如std::fmod(3.1,2)=1.1对浮点数进行......
  • test c++
    testc++ #include<iostream>usingnamespacestd;intmain(){charmyChar[6]={'H','e','l','l','o','\0'};//char*pointer=myChar;//WORKS!!!char*pointer......
  • c++变量、常量
    ///变量声明(规定变量类型和名字)与定义(为变量开辟内存空间)///变量可声明多次,但只能被定义一次///变量名一般以小写开头,类名以大写开头intj=10;//初始化,创建时赋予初始值;有初始化机制,但最好手动初始化j=22;//赋值,将变量当前值替换为新的值inti;//声明[i],但非定义;i=10;......
  • AppStore轻松订阅ChatGPT plus解锁GPT4的方法
    1、登录新账户1.1接着再次点击AppStore中右上角的头像,输入前面注册的美区账号&密码,点击 登录 即可。1.2点击付款方式,可以看到绑定成功的卡。这里我用的是556150的美元虚拟信用卡2、下载ChatGPTApp在AppStore里搜索ChatGPT或点击访问 ‎ChatGPTontheA......