C++设计模式 - 适配器模式(Adapter)
接口隔离模式
- 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。
典型模式
- Facade
- Proxy
- Adapter
- Mediator
Adapter
动机(Motivation)
- 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。
- 如何应对这种“迁移的变化”? 如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?
模式定义
将一个类的接口转换成客户希望的另,个接口。Adapter模式使得原本由于接台不兼容而不能一起土作的那些类可以一竖作。
结构
要点总结
- Adapter模式主要应用于"希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”, 在遗留代码复用、类库迁移等方面非常有用。
- GoF 23定义了两种Adapter模式的实现结构。:对象适配器和类适配器。但类适配器采用“多继承"的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。
- Adapter模式可以实现的非常灵活,不必拘泥于Gof23中定义的两种结构。例如完全可以将Adapter模式中的 “现存对象”作为新的接口方法参数,来达到适配的目的。
cpp
#include<iostream>//目标接口(新接口)
class ITarget
{public:virtual void process() = 0;virtual ~ITarget() {}
};//遗留接口(老接口)
class IAdaptee
{public:virtual int bar() = 0;virtual void foo(int) = 0;virtual ~IAdaptee() {}
};
//遗留类型
class OldClass :public IAdaptee
{public:virtual int bar(){return 1024;}virtual void foo(int data){std::cout << data << std::endl;}
};
//对象适配器
class Adapter :public ITarget
{public:Adapter(IAdaptee* pAdaptee) :pAdaptee_(pAdaptee) {}virtual void process(){int data = pAdaptee_->bar();pAdaptee_->foo(data);}
protected:IAdaptee* pAdaptee_; //对象组合
};/*类适配器
class Adapter : public ITarget,protected OldClass { //多继承//...}
*/
int main()
{IAdaptee* pAdaptee = new OldClass();ITarget* pTarget = new Adapter(pAdaptee);pTarget->process();return 0;
}
C++设计模式 - 适配器模式(Adapter)相关推荐
- 3.设计模式--适配器模式(adapter模式)
1.场景 适配器模式可能是开发人员用的最多的一种设计模式,做后台开发你可能每天都在使用.只是不知道他的名字:现实中的适配器你应该不会陌生,新款的IQOO 8 pro手机充电器已经达到了120w,实际上 ...
- C#设计模式——适配器模式(Adapter Pattern)
一.概述 在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件 ...
- Java设计模式-适配器模式Adapter
定义:"转换接口" 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 我理解的"一个类的接口&q ...
- 趣谈设计模式 | 适配器模式(Adapter):如何让现存对象适用于新的环境?
文章目录 案例:数据线转换器 适配器模式 "补偿"模式 总结 完整代码与文档 案例:数据线转换器 相信对于安卓用户,曾经或多或少都有着因为接口不适配而带来的苦恼.当你在更换手机时, ...
- Java设计模式—适配器模式(adapter pattern)
现在的手机很多都取消了3.5mm的耳机接口,只留下了一个type-c接口.但是我现在只有一个3.5mm圆孔接口的耳机,我不得不通过一个转接线使得3.5mm的耳机变成type-c接口. //Type-C ...
- Java代码审计-设计模式-适配器模式
Java设计模式-适配器模式(Adapter Pattern) 目录 什么是适配器模式 适配器模式的3种类型 JavaSE适配器模式的应用 Struts2适配器模式的应用 适配器模式是一种" ...
- 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern)
[索引页] [源码下载] 乐在其中设计模式(C#) - 适配器模式(Adapter Pattern) 作者:webabcd 介绍 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本 ...
- 【设计模式】—— 适配器模式Adapter
模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器 ...
- 『设计模式』适配器模式(Adapter)
23种设计模式+额外常用设计模式汇总 (持续更新) 适配器模式(Adapter) 适配器模式把一一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. ...
- 设计模式(五)适配器模式Adapter(结构型)
设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库 ...
最新文章
- 《LeetCode力扣练习》第10题 C语言版 (做出来就行,别问我效率。。。。)
- WIn32中CInternetSession运行异常(afxCurrentAppName 为空)
- php生成静态页面并预览
- CTFshow 爆破 web28
- keepalived和heartbeat区别
- 在Go中使用Protobuf
- android java内存 c内存_Android NDK java和C\C++交互 | 学步园
- ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
- cocoapods安装速度慢,CDN: trunk Repo update failed等问题
- java char类型 unicode字符集 utf-8字符编码
- 编辑,修改chm帮助文档,无需修改繁琐的html文件,可以直接编辑修改chm
- Android安卓手机版Kindle字体修改
- python创建子窗口_PyQt5实现从主窗口打开子窗口的方法
- 取消endnotes参考文献格式域的步骤_EndNote参考文献格式的更改(转载)
- SharePoint BI培训资料
- 7-1 公路村村通(prim)
- 【Neo4j】第 11 章 :在您的 Web 应用程序中使用 Neo4j
- PS5上传图片失败,游戏无法推送更新,提示服务器出了点问题,HTTP状态码:403
- 猛犸优化Summary
- 前世的五百次回眸才能换得今生的一次擦肩而过