C++设计模式实现--适配器
来源:互联网 发布:淘宝客推广工具 编辑:程序博客网 时间:2024/05/17 20:31
一、适配器模式特点:
适配器模式主要解决的问题就是我们要调用的接口类型,无法满足我们新系统的使用需求,这时候,我们需要将旧系统的接口,通过适配器进行转配,达到支持新接口调用的目的。对于这样的要求,我们通过适配器就可以完成,当然如果有多个接口需要转配,那么我们就需要为每一个接口提供一个适配器去完成转换的工作。具体的调用过程,我们可以进行相应的封装。达到比较通用的方式去调用适配器,完成适配服务。
二、要点:
1.Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。
2.Adapter模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
三、适用场景:
系统需要使用现有的类,而此类的接口不符合系统的需要。
注:适配器模式不适合在系统设计阶段采用,没有一个系统分析师会在做详设的时候考虑使用适配器模式,这个模式使用的主要场景是扩展应用中。系统扩展了,不符合原有设计的时候才考虑通过适配器模式减少代码修改带来的风险。
四、C++实现
1、类适配器
#include <cstdio>#include <memory>//适配器基类class CTarget{public:virtual void Request(){};};//旧系统接口class CAdapee{public:virtual void AdapeeRequest(){printf("CAdapee\n");}};//适配器类(继承方式)class CAdaper : public CTarget, public CAdapee{public:virtual void Request(){this->AdapeeRequest();}};//调用者int main(int argc, char **argv){CTarget* pTg = new CAdaper();pTg->Request();return 0;}
2、对像适配器
#include <cstdio>#include <memory>//适配器基类class CTarget{public:virtual void Request(){};};//旧系统接口class CAdapee{public:virtual void AdapeeRequest(){printf("CAdapee\n");}};//适配器类(组合方式)class CAdaper : public CTarget{public:virtual void Request(){m_adapee.AdapeeRequest();}private:CAdapee m_adapee;};//调用者int main(int argc, char **argv){CTarget* pTg = new CAdaper();pTg->Request();return 0;}
- C++设计模式实现--适配器
- 适配器设计模式简单实现
- 适配器模式C语言实现
- C#--设计模式之适配器模式
- 设计模式(3)C++实现 适配器模式
- 设计模式之适配器模式(C++实现)
- C++设计模式实现--适配器(Adapter)模式
- 设计模式C++实现十三:适配器模式
- c++实现设计模式之适配器模式
- scala实现设计模式之适配器模式
- 设计模式C++实现--适配器模式
- 设计模式---适配器模式(C++实现)
- 设计模式---适配器模式(C++实现)
- 设计模式之适配器模式Java实现
- Java实现设计模式之适配器模式
- 设计模式--适配器模式--Java实现
- 设计模式-适配器模式 C++实现
- 使用Object-C实现23种设计模式之适配器模式
- Struts使用convention-plugin实现零配置
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
- windows相关技术----资源查询链接
- 做一个健康的程序员
- 观察者模式
- C++设计模式实现--适配器
- 从零开始学习OpenCL开发(一)架构
- java.net.BindException: Address already in use: JVM_Bind
- Linux驱动修炼之道
- awk命令
- 杭电1846简单的巴什博弈
- 【转载】为了我们的SZ4J代码
- UnicodeDecodeError: 'utf8' codec can't decode bytes 
- php进程与线程