现在的位置: 首页 > 综合 > 正文

观察者模式模板

2013年04月20日 ⁄ 综合 ⁄ 共 1005字 ⁄ 字号 评论关闭

        观察者模式也叫监听者模式,在实际项目开发中,用的最多的设计模式之一。

       其适用场合是:当一个事物的状态改变时,需要通知依赖它的事物更新。实际上,这种交互也称发布~订阅,是一种一对多的依赖关系。在实际使用中,也经常将其单独抽出来,将其设计为模板化形式,这样就可以减少项目中各自实现,导致重复代码增多。例如:

 

#ifndef CLISTENABLE_H_
#define CLISTENABLE_H_

#include <list>
#include <algorithm>

//	可监听的模板类
template <class T>
class cListenable 
{
public:
	cListenable();
	virtual ~cListenable();

	void RegisterListener(T *pListener);   // 绑定监听者
	void UnregisterListener(T *pListener); // 分离监听者	

protected:
	typedef std::list<T*> Listeners;
	Listeners m_Listeners; // 监听列表
};


template <class T>
cListenable<T>::cListenable()
{
}

template <class T>
cListenable<T>::~cListenable()
{
}

template <class T>
void cListenable<T>::RegisterListener(T *pListener)
{
	ASSERT(NULL != pListener);
	if (std::find(m_Listeners.begin(), m_Listeners.end(), pListener) == m_Listeners.end()) 
	{
		m_Listeners.push_back(pListener);
	}
}

template <class T>
void cListenable<T>::UnregisterListener(T *pListener)
{
	ASSERT(NULL != pListener);
	Listeners::iterator i = std::find(m_Listeners.begin(), m_Listeners.end(), pListener);
	if (i != m_Listeners.end()) 
	{
		m_Listeners.erase(i);
	}
}
#endif 

抱歉!评论已关闭.