您的位置:首页 > 编程语言 > C语言/C++

c++ 数据封装模式之四: 观察着工厂模式

2011-06-05 14:05 295 查看
// 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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: