设计模式-观察者模式

角色

subject(被观察者)
被观察的对象。当被观察对象的状态发生变化时,需要通知队列中所有观察者对象。

ConcreteSubjec
被观察者的具体实现。包含一些基本的属性以及操作。

Observer(观察者)
接口或抽象类。当subject的状态发生变化时,Observer对象通过一个callback函数得到通知。

ConcreteObserver
观察者的实现。

应用场景

侦听事件驱动程序设计中的外部事件
侦听/监视某个对象的状态变化
发布者/订阅者模型中,当一个外部事件被触发时,通知邮件列表郑工的订阅者。

定义对象间一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的对象都会得到通知。

代码实现:

#include<iostream>
#include<string>
#include<list>
using namespace std;


class Monitor;
class Observer
{
public:
	Observer(Monitor* mMonitor)
	{
		this->mMonitor = mMonitor;
	}
	void update()
	{
		cout << "update too scary" << endl;
	}
private:
	Monitor* mMonitor;
};

class Monitor
{
public:
	void setObserver(Observer* Ob)
	{
		m_list.push_back(Ob);
	}
	void Update()
	{
		for (list< Observer*>::iterator it = m_list.begin(); it != m_list.end(); ++it)
		{
			(*it)->update();
		}
	}
private:
	list< Observer*> m_list;
};







int main()
{
	Monitor* cpMonitor = nullptr;
	Observer* cpObserver1 = nullptr;
	Observer* cpObserver2 = nullptr;
	cpMonitor = new Monitor;
	cpObserver1 = new Observer(cpMonitor);
	cpObserver2 = new Observer(cpMonitor);
	cpMonitor->setObserver(cpObserver1);
	cpMonitor->setObserver(cpObserver2);

	cpMonitor->Update();
	delete cpMonitor;
	delete cpObserver1;
	delete cpObserver2;
	return system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值