C++实现观察者模式(订阅,发布)

文章介绍了观察者模式的概念,它定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知并自动更新。文章提供了一个C++实现的例子,包括Observer和Subscribe类,展示如何注册、通知和注销观察者。
摘要由CSDN通过智能技术生成

观察者模式是一个应用非常广的模式之一,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不需要知道谁是它的观察者。

在这里插入图片描述

具体C++实现代码如下:
#pragma once
#include <queue>
#include <iostream>
class Observer
{
public:
	explicit Observer();

	virtual ~Observer();

	virtual void update(int value) = 0;
};

class Observer1 : public Observer
{
public:
	explicit Observer1();
	~Observer1();

	void update(int value);
};

class Observer2 : public Observer
{
public:
	explicit Observer2();
	~Observer2();

	void update(int value);
};

class Subscribe
{
public:
	explicit Subscribe();

	virtual ~Subscribe();

	virtual void notify(int value);

	void Register(Observer* pOb);

	void unRegister(Observer* pOb);

protected:
	std::vector<Observer*> m_observerVec;

};

class Subscribe1 : public Subscribe
{
public:
	explicit Subscribe1();
	~Subscribe1();
	void notify(int value);

};

Observer::Observer()
{

}

Observer::~Observer()
{

}

Observer1::Observer1()
{

}

Observer1::~Observer1()
{

}

void Observer1::update(int value)
{
	std::cout << this << "值改变:" << value << std::endl;
}

Observer2::Observer2()
{

}

Observer2::~Observer2()
{

}

void Observer2::update(int value)
{
	std::cout << this << "值改变:" << value << std::endl;
}

Subscribe::Subscribe()
{

}

Subscribe::~Subscribe()
{

}

void Subscribe::notify(int value)
{
	for (Observer* pOb : m_observerVec)
		pOb->update(value);
}

void Subscribe::Register(Observer* pOb)
{
	if (pOb == nullptr)return;
	std::vector<Observer*>::iterator it = std::find(m_observerVec.begin(), m_observerVec.end(), pOb);
	if (it == std::end(m_observerVec))
		m_observerVec.emplace_back(pOb);
}

void Subscribe::unRegister(Observer* pOb)
{
	if (pOb == nullptr)return;
	std::vector<Observer*>::iterator it = std::find(m_observerVec.begin(), m_observerVec.end(), pOb);
	if (it != std::end(m_observerVec))
		m_observerVec.erase(it);
}

Subscribe1::Subscribe1()
{

}

Subscribe1::~Subscribe1()
{

}

void Subscribe1::notify(int value)
{
	Subscribe::notify(value);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值