观察者模式

//观察者模式 begin;
class Observer
{//观察者接口;
public:
	virtual void update(int) = 0;
};

class Subject
{//主题接口;
public:
	virtual void RegisterObserver(Observer*) = 0;
	virtual void RemoveObserver(Observer*) = 0;
	virtual void notifyObserver() = 0;
};

class ConcreteSubject:public Subject
{//主题的具体实现类;
public:
	virtual void RegisterObserver(Observer* pObserver)
	{
		m_ObserverList.push_back(pObserver);
	}
	virtual void RemoveObserver(Observer* pObserver)
	{
		m_ObserverList.remove(pObserver);
	}
	virtual void notifyObserver()
	{
		for (std::list<Observer*>::iterator iter = m_ObserverList.begin();
			iter != m_ObserverList.end();
			++iter)
		{
			(*iter)->update(m_iState);
		}
	}
	void SetState(const int state)
	{
		m_iState = state;
	}
private:
	std::list<Observer *> m_ObserverList;
	int m_iState;
};
//观察者实现类;
class ConcreteObserverOne:public Observer
{
public:
	ConcreteObserverOne(Subject *pSubject):m_pSubject(pSubject){}
	virtual void update(int value)
	{
		std::cout << "ConcreteObserverOne get the update. New State:" << value << std::endl;
	}
private:
	Subject *m_pSubject;
};
class ConcreteObserverTwo :public Observer
{
public:
	ConcreteObserverTwo(Subject *pSubject) :m_pSubject(pSubject) {}
	virtual void update(int value)
	{
		std::cout << "ConcreteObserverTwo get the update. New State:" << value << std::endl;
	}
private:
	Subject *m_pSubject;
};
void Observer_Test()
{	//定义主题对象;
	ConcreteSubject *pSubject = new ConcreteSubject();
	//定义观察者对象;
	Observer *pObserver1 = new ConcreteObserverOne(pSubject);
	Observer *pObserver2 = new ConcreteObserverTwo(pSubject);

	//向主题注册观察者;
	pSubject->RegisterObserver(pObserver1);
	pSubject->RegisterObserver(pObserver2);
	//设置主题状态;
	pSubject->SetState(2);
	//更新已经注册的观察者的状态;
	pSubject->notifyObserver();
	//取消观察者注册;
	pSubject->RemoveObserver(pObserver1);
	//应该可以实用观察者自己去注册和删除实用m_pSubject成员;
	delete pSubject;
	delete pObserver1;
	delete pObserver2;
}
//观察者模式 end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

熊猫Devin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值