| YGFaith |
|
|||
|
公告
日历
统计
导航 |
定义:对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 //接口 //ITransfer.h #pragma once![]() class ITransfer { public: virtual bool DoTransfer(...) = 0; }; //FetionTransfer.h#pragma once #include "Transfer.h" class CFetionTransfer:public ITransfer { public: CFetionTransfer(); ~CFetionTransfer(); bool DoTransfer(...); private: ...... }; //MailTransfer.h#pragma once #include "Transfer.h" class CMailTransfer: public ITransfer { public: CMailTransfer(); ~CMailTransfer(); bool DoTransfer(...); private: .... }; //TransferPool.h #pragma once![]() #include "Transfer.h" #include <vector> using namespace std;![]() class CTransferPool { private: vector<ITransfer*> vo; public: virtual ~CTransferPool();![]() void Login(ITransfer* po);![]() void Logout(ITransfer* po); //向各成员广播消息 void Notify(...); }; //TransferPool.cpp #include "TransferPool.h"![]() CTransferPool::~CTransferPool() { vector<ITransfer*>::iterator vi = vo.begin(); for (; vi != vo.end(); vi++) { if(*vi){ delete *vi; *vi = NULL; } } }![]() void CTransferPool::Login(ITransfer* po) { vo.push_back(po); }![]() void CTransferPool::Logout(ITransfer* po) { vector<ITransfer*>::iterator vi = vo.begin(); for (; vi != vo.end(); vi++) { if (*vi == po) vo.erase(vi); } }![]() void CTransferPool::Notify(...) { vector<ITransfer*>::iterator vi = vo.begin(); for (; vi != vo.end(); vi++) { ITransfer *s = *vi; (*vi)->DoTransfer(...); } }![]() void main { CTransferPool*m_pTranPool= new CTransferPool(); CFetionTransfer *m_pFetionTran = new CFetionTransfer(...); CMailTransfer *m_pMailTran = new CMailTransfer(...);![]() m_pTranPool->Login(m_pFetionTran); m_pTranPool->Login(m_pMailTran); while(需要发送消息) { m_pTranPool->Notify( ); }![]() //释放 if(m_pTranPool) { delete m_pTranPool; m_pTranPool = NULL; }![]() ![]() ![]() ![]() }程序员问答社区,解决您的IT难题
|
![]() |
|
| Copyright © YGFaith | Powered by: 博客园 模板提供:沪江博客 |