观察者模式(c++)

#include<iostream>
#include<vector>
class Observer;
// 主题抽象类
class Subject {
public:
	virtual void attach(Observer* observer) = 0;
	virtual void detach(Observer* observer) = 0;
	virtual void notify() = 0;
};
// 观察者抽象类
class Observer {
public:
	virtual void update() = 0;
};
// 具体观察者类A
class ConcreteObserverA : public Observer {
public:
	void update() override
	{
		std::cout << "具体观察者A收到通知并作出响应" << std::endl;
	}
};
// 具体观察者类B
class ConcreteObserverB : public Observer {
public:
	void update() override 
	{
		std::cout << "具体观察者B收到通知并作出响应" << std::endl;
	}
};
// 具体主题类
class ConcreteSubject : public Subject {
private:
	std::vector<Observer*> observers;
public:
	void attach(Observer* observer) override
	{
		observers.push_back(observer);
	}
	void detach(Observer* observer) override
	{
		for (auto it = observers.begin(); it != observers.end(); ++it) {
			if (*it == observer) {
				observers.erase(it);
				break;
			}
		}
	}
	void notify()override 
	{
		for (auto observer : observers)
		{
			observer->update();
		}
	}
};
int main()
{
    ConcreteSubject subject;
    Observer* observerA = new ConcreteObserverA();
    Observer* observerB = new ConcreteObserverB();
    subject.attach(observerA);
    subject.attach(observerB);
    subject.notify();//输出:具体观察者A收到通知并作出响应,具体观察者B收到通知并作出响应
    subject.detach(observerA);
    subject.notify();//输出:具体观察者B收到通知并作出响应
    delete observerA;
    delete observerB;
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
观察者模式是一种常见的设计模式,用于实现对象之间的松散耦合。在C++线程池中,可以使用观察者模式来实现任务的调度和通知系统。通过观察者模式,可以将任务添加到任务队列中,并由线程池中的线程来执行这些任务。 在线程池中,可以创建一个任务接口类ITask作为观察者模式中的观察者,该接口类需要有一个纯虚函数Run来执行具体的任务。然后,可以创建具体的任务类myTask来继承ITask接口,并实现Run函数来定义具体的任务流程。通过这种方式,可以实现不同类型的任务,并将它们添加到线程池的任务队列中。 引用中提到的代码示例展示了如何使用观察者模式来实现线程池中的任务。通过创建ITask接口类和myTask任务类,并实现任务的具体流程,可以实现线程池中的任务调度和执行。 此外,引用中提到的代码地址可以查看更多关于线程池任务的实现细节和完整示例代码。 总结起来,观察者模式可以在C++线程池中用于实现任务的调度和通知系统,通过创建任务接口类和具体任务类,并使用虚函数来定义任务流程,可以实现线程池中不同类型任务的执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++线程池任务实现(简洁版)](https://blog.csdn.net/PX1525813502/article/details/128009153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [设计模式之观察者模式,以C++为例。](https://blog.csdn.net/weixin_44120785/article/details/128941527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值