📄 observer.cpp
字号:
// 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -