// Observer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "ostream.h"
#include <afxcoll.h>
//定义抽象观察者角色
class CObserver
{
public:
// Observer.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "ostream.h" #include <afxcoll.h> //定义抽象观察者角色 class CObserver { public: virtual UpdateOpt()= 0; }; //定义具体观察者角色 class CDetailObsvr: public CObserver { public: virtual UpdateOpt() { cout<<"Get Notification!/n"; } }; //定义抽象主题角色 class CSubject { public: virtual void AddObsvr(CObserver* Observer) = 0; virtual void DeleteObsvr()= 0; virtual void NotifyObsvr()= 0; virtual void SetState(int State) = 0; virtual ~CSubject() { ; } }; //定义具体主题角色 class CDetailSub: public CSubject { 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->UpdateOpt(); } } public: virtual void SetState(int State) { m_State = State; NotifyObsvr(); } CDetailSub() { m_ObsvrList = new CObList(); } virtual void AddObsvr(CObserver* Observer) { m_ObsvrList->AddTail((CObject*)Observer); } virtual void DeleteObsvr() { m_ObsvrList->RemoveTail(); } 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; } }; int main(int argc, char* argv[]) { 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; }