遇到的一个设计问题,两种方法的实现

问题描叙:
> IManage是个模仿com查询得到其他的接口的管理接口
    >>测试每个接口的所指的对象
> ILink是个供应用层使用的接口,作用有两个:
1、在这个接口中得到的解码器句柄,再传给另个底层模块;
2、这个接口还有其它的用处
   >>测试
       第一种方法:继承不同的接口于一身的类的编写方法
       第二种方法,即托管的方法:写一个CLinkMgr继承于ILink,
       CLinkMgr中的一个方法里生成 new 出一个CLinkDecode*,
       然后返回的值是BaseDecode。而CLinkDecode继承于接口BaseDecode。
       这就是所谓的“托管方法”。


以下是测试代码:

#define MgrApi __stdcall void MgrApi CreateMgr(void **ppv); //应用层调用 //供底层使用的接口 class BaseDecoder { public: virtual int GetNextFrame(void) = 0; }; //以下三个是供应用层使用的接口 class ILink { public: virtual int GetCount(void) = 0; virtual void SetCount(int nCount) = 0; virtual BaseDecoder* GetBaseDecoder(void) = 0; // }; class IRun { public: virtual int GetCount(void) = 0; virtual void SetCount(int nCount) = 0; }; //管理接口 class IManage { public: virtual ILink* GetILink(void) = 0; virtual IRun* GetIRun(void) = 0; }; //底层实现 class CLink : public ILink, public BaseDecoder //主要测试这个类 { public: CLink(void){ m_nCount = 0; } virtual ~CLink(){} virtual int GetCount(void){ return m_nCount; } virtual void SetCount(int nCount){ m_nCount = nCount; } ILink* GetILink(void){ return this; //测试 } virtual BaseDecoder* GetBaseDecoder(void){ return this; //主要测试这个 } virtual int GetNextFrame(void){ return 8; //// 测试 } private: int m_nCount; }; //底层实现 class CRun : public IRun { public: CRun(void){ m_nCount = 0; } virtual ~CRun(){} virtual int GetCount(void){ return m_nCount; } virtual void SetCount(int nCount){ m_nCount = nCount; } IRun* GetIRun(void){ return this; // } private: int m_nCount; }; //底层实现 class CManage : public IManage { public: CManage(void){} virtual ~CManage(){} virtual ILink* GetILink(void){ CLink *ppv = new CLink(); return ppv; } virtual IRun* GetIRun(void){ CRun *ppv = new CRun(); return ppv; } }; //底层实现 void MgrApi CreateMgr(void **ppv) { CManage *pMgr = new CManage(); if (pMgr) { *ppv = pMgr; } } //模拟应用层 int _tmain(int argc, _TCHAR* argv[]) { IManage *ppv = NULL; ILink *pLink = NULL; IRun *pRun = NULL; BaseDecoder *pDecoder = NULL; CreateMgr((void**)&ppv); pLink = ppv->GetILink(); pRun = ppv->GetIRun(); pLink->SetCount(9); pDecoder = pLink->GetBaseDecoder(); printf("%d/n", pLink->GetCount()); printf("%d/n", pDecoder->GetNextFrame()); return 0; }

你可能感兴趣的:(遇到的一个设计问题,两种方法的实现)