一、发布者
添加订阅者
移除订阅者
将消息通知给订阅者列表
#pragma once
#include <iostream>
#include <string>
#include <list>
#include "Observer.h"
class SendSignaler
{
public:
virtual void attach(Observer* handle) = 0;
virtual void detach(Observer* handle) = 0;
virtual void notify(std::string strMsg) = 0;
protected:
std::list<Observer*> mObserverList;
};
class SendSignaler1 : public virtual SendSignaler
{
public:
void attach(Observer* handle) override
{
mObserverList.emplace_back(handle);
}
void detach(Observer* handle) override
{
mObserverList.remove(handle);
}
void notify(std::string strMsg) override
{
std::cout << "当前观察者有:" << mObserverList.size() << "人。" << std::endl;
for (const auto& it : mObserverList)
{
it->update(strMsg);
}
}
};
二、订阅者
接受消息通知进行相应响应
#pragma once
#include <iostream>
#include <string>
#include "Signal.h"
class Observer
{
public:
virtual void update(std::string& strReceiveMsg) = 0;
};
class Observer1 : public Observer
{
public:
void update(std::string& strReceiveMsg) override
{
std::cout << "观察者1收到:" << strReceiveMsg << std::endl;
}
};
class Observer2 : public Observer
{
public:
void update(std::string& strReceiveMsg) override
{
std::cout << "观察者2收到:" << strReceiveMsg << std::endl;
}
};
==============================================================
测试:
#include "Signal.h"
#include "Observer.h"
int main()
{
SendSignaler1 Sender1;
Observer1 Receiver1;
Observer2 Receiver2;
Sender1.attach(&Receiver1);
Sender1.attach(&Receiver2);
Sender1.notify("下达任务XXX");
Sender1.detach(&Receiver1);
Sender1.notify("...................");
system("pause");
return 0;
}
