c++以代理的方式来实现接口化编程
2015-04-08 18:55
169 查看
假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程
struct ITest { virtual void Test()=0; }; class CTest { public: void Test() {} }; class CTestProxy:public ITest { void Test() { m_object.Test(); } protected: CTest m_object; }; class TestObject { public: static void Demo() { ITest *pTest=new CTestProxy; pTest->Test(); } };
改过为模板化
template<class T, class I> class CTestProxy:public I { void Test() { m_object.Test(); } protected: T m_object; };
再来看子类的实现
struct ISubTest:public ITest { virtual void SubTest()=0; }; class CSubTest:public CTest { public: void SubTest() {} }; template<class T, class I> class CSubTestProxy:public CTestProxy<T,I> { void SubTest() { m_object.SubTest(); } };
此方法可以使用接口的形式重用原有实现代码
实体类与接口交互
struct ITest { virtual void Test()=0; virtual ITest* GetProxy()=0; virtual void SetProxy(ITest* pTest)=0; }; class CTest { public: CTest() { m_pTest=NULL; } void Test() { } ITest* GetProxy() { return m_pTest; } void SetProxy(ITest* pTest) { m_pTest=pTest; } template<class T> T* Get() { ITest* pProxy=GetProxy(); T* pT=dynamic_cast<T*>(pProxy); return pT; } protected: ITest *m_pTest; }; template<class T, class I> class CTestProxy:public I { public: CTestProxy() { SetProxy(this); } void Test() { m_object.Test(); } ITest* GetProxy() { return m_object.GetProxy(); } void SetProxy(ITest* pTest) { m_object.SetProxy(pTest); } protected: T m_object; };
添加一个指针便有了两边交互的能力
外部类继承:
需要将T m_object声明成为指针,该类并非为导出类,避免对外暴露实现
相关文章推荐
- c++以代理的方式来实现接口化编程
- 【编程题目】数值的整数次方——关于代码完整性及错误处理方式的探讨(C++实现)
- 抱歉,没分了!!!请教linux下,用C/C++编程,如何知道我要实现某一功能需要用到什么函数
- 仿基因编程原理及其C++实现
- 仿基因编程原理及其C++实现
- 网络编程概念全面接触(四).C++与Java的实现
- C#网络编程—实现Web代理功能
- 用c++函数编程实现三角形的面积
- 仿基因编程原理及其C++实现
- 仿基因编程原理及其C++实现
- TCP Socket编程 C/C++实现 (Windows Platform SDK)
- 如何编程实现在快速启动栏创建快捷方式
- UDP Socket编程 C/C++实现 (Windows Platform SDK)
- C++ GUI Programming with Qt 4 - 10.4 实现自定义代理(delegate)
- 仿基因编程原理及其C++实现
- 编程实现木马的ActiveX启动和注入IE的启动方式
- c++和c实现混合编程接口--extern “C”含义深层探索
- 仿基因编程原理及其C++实现
- (C#)中的身份模拟/帐户模拟(编程方式实现)(转载)