c++以代理的方式来实现接口化编程
2013-11-05 14:13
393 查看
假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程
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++实现)
- Windows编程之模块遍历(C++实现)
- C++ 多参函数的实现方式
- 编程实现木马的ActiveX启动和注入IE的启动方式
- TCP/UDP Socket编程 C/C++实现(Windows Platform SDK)
- 以继承的硬编码方式实现的代理
- 使用#ifdef _cplusplus 实现c 和 c++的混合编程
- [转载]C++异常机制的实现方式和开销分析
- [转]JAVA的动态代理机制及Spring的实现方式
- [转载]aop代理方式引起的spring注入bean(实现类)与获取bean(实现类)出错
- 谈谈下订单的几种实现方式(用不同的模式实现:装饰器模式、代理模式、命令模式、状态模式、模版模式)
- 用C++实现二叉树的三种遍历方式
- C++用多种方式实现Singleton单例模式
- UDP Socket编程 C/C++实现 (Windows Platform SDK)
- AOP实现方式1——经典的基于代理的AOP实现
- C++模板编程实现二维数组
- 队列的C++实现(两种方式)
- iOS UITextField禁止键盘弹出,同时又实现代理方法的实现方式!