#include <afxcoll.h> #include<iostream> using namespace std; /************************************* 观察者模式定义了对象间的一种一对多依赖关系, 使得每当一个对象改变状态,则所有依赖于它的 对象都会得到通知并被自动更新. ***********************************/ //抽象观察者角色 class CObserver { public: virtual UpdataOpt() = 0; }; //具体观察着角色 class CDetailObsvr:public CObserver { public: virtual UpdataOpt() { cout<<"Get Notification!"<<endl; } }; //抽象主题 class CSubject { public: virtual void AddObsvr(CObserver* obsvr) = 0; virtual void DeleteObsvr() = 0; virtual void NotifyObsvr() = 0; virtual void SetState(int state) = 0; virtual ~CSubject() {} }; //具体主题 class CDetailSub: public CSubject { public: CDetailSub() { m_ObsvrList = new CObList(); } virtual void SetState(int state) { m_State =state; NotifyObsvr();} virtual void DeleteObsvr() { m_ObsvrList->RemoveTail(); } virtual void AddObsvr(CObserver* obsvr) //添加观察者对象 { m_ObsvrList->AddTail((CObject*)obsvr); } virtual ~CDetailSub() { POSITION pos = m_ObsvrList->GetHeadPosition(); if (pos) { while (pos) { CObserver* pObsvr = (CObserver*)m_ObsvrList->GetNext(pos); delete pObsvr; } m_ObsvrList->RemoveAll(); } delete m_ObsvrList; } protected: CObList* m_ObsvrList; int m_State; virtual void NotifyObsvr() { POSITION pos = m_ObsvrList->GetHeadPosition(); while (pos) { CObserver* pObsvr = (CObserver*)m_ObsvrList->GetNext(pos); pObsvr->UpdataOpt(); } } }; int main() { CSubject* pSub = new CDetailSub(); pSub->AddObsvr(new CDetailObsvr()); pSub->AddObsvr(new CDetailObsvr()); pSub->AddObsvr(new CDetailObsvr()); pSub->AddObsvr(new CDetailObsvr()); pSub->SetState(10); delete pSub; return 0; }