/********************************************************************created: 2006/07/20filename: Observer.hauthor: 李創http://www.cppblog.com/converse/purpose: Observer模式的演示代碼
*********************************************************************/#ifndef OBSERVER_H
#define OBSERVER_H#include <list>typedef int STATE;class Observer;// Subject抽象基類,只需要知道Observer基類的聲明就可以了
class Subject
{
public:Subject() : m_nSubjectState(-1){}virtual ~Subject();void Notify(); // 通知對象改變狀態void Attach(Observer *pObserver); // 新增對象void Detach(Observer *pObserver); // 刪除對象// 虛函數,提供默認的實現,派生類可以自己實現來覆蓋基類的實現virtual void SetState(STATE nState); // 設置狀態virtual STATE GetState(); // 得到狀態protected:STATE m_nSubjectState; // 模擬保存Subject狀態的變量std::list<Observer*> m_ListObserver; // 保存Observer指針的鏈表
};// Observer抽象基類
class Observer
{
public:Observer() : m_nObserverState(-1){}virtual ~Observer(){}// 純虛函數,各個派生類可能有不同的實現// 通知Observer狀態發生了變化virtual void Update(Subject* pSubject) = 0;protected:STATE m_nObserverState; // 模擬保存Observer狀態的變量
};// ConcreateSubject類,派生在Subject類
class ConcreateSubject: public Subject
{
public:ConcreateSubject() : Subject(){}virtual ~ConcreateSubject(){}// 派生類自己實現來覆蓋基類的實現virtual void SetState(STATE nState); // 設置狀態virtual STATE GetState(); // 得到狀態};// ConcreateObserver類派生自Observer
class ConcreateObserver: public Observer
{
public:ConcreateObserver() : Observer(){}virtual ~ConcreateObserver(){}// 虛函數,實現基類提供的接口virtual void Update(Subject* pSubject);
};#endif
?