天上飞来一只 发表于 2020-10-24 17:12

[C++]【笔记】观察者模式

代码编译环境:VS2019
来一波热心吧!鼓励一下新人,谢谢
#include <iostream>
#include <list>
using namespacestd;

//博客
class CBlog
{
public:
        CBlog(string strName)
        {
                m_strName = strName;
        }
public:
        string m_strName;
        string m_strConnext;
};

//观察者
class IObserver
{
public:
    virtual void Notify(CBlog* pBlg) = 0;
};

//用户 1:N
class CPerson:public IObserver
{
public:
    CPerson(string strName)
    {
      m_strName = strName;
    }
    void AddPerson(IObserver* pObj)
    {
      m_lstObj.push_front(pObj);
    }
    void SendConnext(string strConnext)
    {
      CBlog* pBlg = new CBlog(m_strName);
      pBlg->m_strConnext = strConnext;
      
      //遍历好友列表,调用回复
      auto it = m_lstObj.begin();
      while (it!=m_lstObj.end())
      {
            (*it)->Notify(pBlg);
            ++it;
      }
    }
    //重写接口收到Notify通知
        void Notify(CBlog* pBlg)
        {
      cout << "收到用户Notify:" << pBlg->m_strName <<pBlg->m_strConnext << endl;
        }
   
public:
    string m_strName;
    string m_strConnext;
    list<IObserver*> m_lstObj;
    list<CBlog*> m_lstBlg;
};

int main()
{
    std::cout << "Hello World!\n";
    //创建用户
    CPerson* p1 = new CPerson("战士");
    CPerson* p2 = new CPerson("法师");
    CPerson* p3 = new CPerson("道士");

    //加好友
    p1->AddPerson(p2);
    p1->AddPerson(p3);

    //p1说话
    p1->SendConnext("打BOSS!!");
}

无敌小车 发表于 2020-10-24 17:29

感谢楼主分享

Insist_2020 发表于 2020-10-24 17:37

感谢分享!!!!!!!!!

tt0202 发表于 2020-10-24 17:40

感谢楼主分享

yc0205 发表于 2020-10-24 18:08

感谢楼主分享

sergin 发表于 2020-10-24 18:16

支持一波!!

火绒 发表于 2020-10-24 18:56

你管这叫新人?????

4561pkpk 发表于 2020-10-24 21:27

感谢分享,正好计划准备研究C++
页: [1]
查看完整版本: [C++]【笔记】观察者模式