⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 observer.cpp

📁 《Visual C++视频技术方案宝典》配套光盘
💻 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 + -