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

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

private:
	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);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++观察者模式(Observer Pattern)是一种设计模式,用于在对象之间建立一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖它的对象都会自动收到通知并进行相应的更新。 观察者模式由以下几个关键角色组成: 1. 主题(Subject):也被称为被观察者(Observable),它是一个抽象类或接口,定义了添加、删除和通知观察者的方法。主题可以有多个观察者,并在状态发生改变时通知所有观察者。 2. 观察者(Observer):观察者是主题所依赖的对象,当主题的状态发生变化时,观察者会接收到通知并进行相应的更新。观察者一般通过接口或抽象类定义,以便主题可以统一处理不同类型的观察者。 3. 具体主题(Concrete Subject):具体主题是主题类的实现,它维护着一个观察者列表,并在状态发生变化时通知观察者。 4. 具体观察者(Concrete Observer):具体观察者是观察者接口的实现,它定义了收到通知后具体的处理逻辑。每个具体观察者可以有自己的状态和行为,但是它们都通过观察者接口与主题进行交互。 观察者模式的工作流程如下: 1. 主题维护一个观察者列表,并提供添加、删除和通知观察者的方法。 2. 观察者通过实现观察者接口并注册到主题中,以便在状态变化时接收通知。 3. 当主题的状态发生改变时,它会遍历观察者列表并调用每个观察者的更新方法,将状态变化的消息传递给观察者。 4. 观察者在接收到通知后,可以根据自身的需求进行相应的更新操作。 观察者模式的优点包括: - 松耦合:主题和观察者之间是松耦合的,它们可以独立地进行修改和扩展,而不会影响到彼此。 - 可扩展性:可以方便地增加新的观察者或主题,而无需修改现有的代码。 - 面向对象设计原则:符合单一职责原则和开闭原则,使得代码更加可维护和可扩展。 观察者模式在很多场景中都有应用,例如事件驱动系统、GUI 界面开发发布-订阅模式等。 希望这个介绍对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Pailugou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值