快速业务通道

观察者模式(Subject/Observer)

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

定义:对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

功能:搜索数据库,当有需要公布的数据将其用各种方式发送出去。

观察者模式无疑能很好的做到上面的要求,无论要多少种方式,只要增加多个继承之ITransfer接口的派生类即可,有很好的维护性。

以下是实际的应用.

观察者模式(Subject/Observer)

//?ó?ú
//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);
?? //?ò?÷3é?±1?2¥???¢
????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(Dèòa·¢?í???¢)
????????{
????????????m_pTranPool->Notify();
????????}

????????//êí·?
??????????if(m_pTranPool)
????????{
????????????delete m_pTranPool;
????????????m_pTranPool = NULL;
????????}

}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号