以下是一个简单的C++订阅者发布者模型示例:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// 订阅者接口
class Subscriber
{
public:
virtual ~Subscriber() {};
virtual void update(const string& message) = 0; // 更新消息
};
// 发布者接口
class Publisher
{
public:
virtual ~Publisher() {};
virtual void addSubscriber(Subscriber* subscriber) = 0; // 添加订阅者
virtual void removeSubscriber(Subscriber* subscriber) = 0; // 移除订阅者
virtual void notify(const string& message) = 0; // 通知订阅者
};
// 具体订阅者类
class ConcreteSubscriber : public Subscriber
{
public:
ConcreteSubscriber(const string& name) : m_name(name) {}
virtual void update(const string& message)
{
cout << "收到来自" << m_name << "的消息:" << message << endl;
}
private:
string m_name; // 订阅者名字
};
// 具体发布者类
class ConcretePublisher : public Publisher
{
public:
virtual ~ConcretePublisher()
{
// 释放订阅者列表内存
for (vector<Subscriber*>::iterator it = m_subscribers.begin(); it != m_subscribers.end(); ++it)
{
delete (*it);
}
m_subscribers.clear();
}
virtual void addSubscriber(Subscriber* subscriber)
{
m_subscribers.push_back(subscriber);
}
virtual void removeSubscriber(Subscriber* subscriber)
{
for (vector<Subscriber*>::iterator it = m_subscribers.begin(); it != m_subscribers.end(); ++it)
{
if (*it == subscriber)
{
m_subscribers.erase(it);
break;
}
}
}
virtual void notify(const string& message)
{
for (vector<Subscriber*>::iterator it = m_subscribers.begin(); it != m_subscribers.end(); ++it)
{
(*it)->update(message);
}
}
private:
vector<Subscriber*> m_subscribers; // 订阅者列表
};
int main()
{
// 创建发布者对象
ConcretePublisher* publisher = new ConcretePublisher();
// 创建订阅者对象
Subscriber* sub1 = new ConcreteSubscriber("订阅者1");
Subscriber* sub2 = new ConcreteSubscriber("订阅者2");
// 添加订阅者
publisher->addSubscriber(sub1);
publisher->addSubscriber(sub2);
// 发布消息
publisher->notify("这是一条测试消息");
// 移除订阅者
publisher->removeSubscriber(sub1);
// 再次发布消息
publisher->notify("这是另一条测试消息");
// 释放内存
delete publisher;
delete sub1;
delete sub2;
return 0;
}
在这个示例中,订阅者通过实现Subscriber接口中的update方法来接收来自发布者的消息。发布者通过添加和移除订阅者、通知订阅者来实现消息发布的功能。当发布者发布一条消息时,它会通知所以订阅者,每个订阅者会根据自己实现update方法来处理消息。
本文福利, 免费领取C++学习资料包、技术视频/代码,内容包括(C++基础,网络编程,数据库,中间件,后端开发,音视频开发,Qt开发)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓