千家信息网

Adapter适配器模式怎么应用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Adapter适配器模式怎么应用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Adapter适配器模式怎么应用"吧!Adapter
千家信息网最后更新 2026年11月02日Adapter适配器模式怎么应用

这篇文章主要讲解了"Adapter适配器模式怎么应用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Adapter适配器模式怎么应用"吧!

Adapter(适配器模式)

Adapter(适配器模式)属于结构型模式,别名 wrapper,结构性模式关注的是如何组合类与对象,以获得更大的结构,我们平常工作大部分时间都在与这种设计模式打交道。

意图:将一个类的接口转换成客户希望的另一个接口。Adapter 模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。

这个设计模式的意图很好懂,就是把接口不兼容问题抹平。注意,也仅仅能解决接口不一致的问题,而不能解决功能不一致的问题。

举例子

如果看不懂上面的意图介绍,没有关系,设计模式需要在日常工作里用起来,结合例子可以加深你的理解,下面我准备了三个例子,让你体会什么场景下会用到这种设计模式。

接口转换器

插座的种类很多,我们都用过许多适配器,将不同的插头进行转换,可以在不替换插座的情况下正常使用。

USB 接口转换也同样精彩,有将 TypeC 接口转换为 TypeA 的,也有将 TypeA 接口转换为 TypeC 的,支持双向转换。

接口转换器就是我们在生活中使用到的适配器模式,因为厂商并没有生产一个新的插座,我们也没有因为接口不适配而换一个手机,一切只需要一个接口转换器即可,这就是运用设计模式的收益。

数据库 ORM

ORM 屏蔽了 SQL 这一层,带来的好处是不需要理解不同 SQL 语法之间的区别,对于通用功能,ORM 会根据不同的平台,比如 Postgresql、Mysql 进行 SQL 的转换。

对 ORM 来说,屏蔽不同平台的差异,就是利用适配器模式做到的。

API Deprecated

当一个广泛使用的库进行了含有 break change 的升级时,往往要留给开发者足够的时间去升级,而不能升级后就直接挂掉,因此被废弃的 API 要标记为 deprecated,而这种被废弃标记的 API 的实际实现,往往是使用新的 API 替代,这种场景正是使用了适配器模式,将新的 API 适配到旧的 API,实现 API Deprecated。

意图解释

上面三个例子都满足下面两个条件:

API 不兼容:因为接口的不同;数据库 SQL 语法的不同;框架 API 的不同。

但能力已支持:插座都拥有充电或读取能力;不同的 SQL 都拥有查询数据库能力;新 API 覆盖了旧 API 的能力。

这样就可以通过适配器满足 Adapter 的意图:

意图:将一个类的接口转换成客户希望的另一个接口。Adapter 模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。

结构图

适配器的实现分为继承与组合模式。

下面是名词解释:

Adapter 适配器,把 Adeptee 适配成 Target。

Adaptee 被适配的内容,比如不兼容的接口。

Target 适配为的内容,比如需要用的接口。

继承:

适配器继承 Adaptee 并实现 Target,适用场景是 Adaptee 与 Target 结构类似的情况,因为这样只需要实现部分差异化即可。

组合:

组合的拓展性更强,但工作量更大,如果 Target 与 Adaptee 结构差异较大,适合用组合模式。

代码例子

下面例子使用 typescript 编写。

继承:

interface ITarget {

// 标准方式是 hello

hello: () => void

}

class Adaptee {

// 要被适配的类方法叫 sayHello

sayHello() {

console.log('hello')

}

}

// 适配器继承 Adaptee 并实现 ITarget

class Adapter extends Adaptee implements ITarget {

hello() {

// 用 sayHello 对接到 hello

super.sayHello()

}

}

组合:

interface ITarget {

// 标准方式是 hello

hello: () => void

}

class Adaptee {

// 要被适配的类方法叫 sayHello

sayHello() {

console.log('hello')

}

}

// 适配器继承 Adaptee 并实现 ITarget

class Adapter implements ITarget {

private adaptee: Adaptee

constructor(adaptee: Adaptee) {

this.adaptee = adaptee

}

hello() {

// 用 adaptee.sayHello 对接到 hello

this.adaptee.sayHello()

}

}

弊端

使用适配器模式本身就可能是个问题,因为一个好的系统内部不应该做任何侨界,模型应该保持一致性。只有在如下情况才考虑使用适配器模式:

新老系统接替,改造成本非常高。

三方包适配。

新旧 API 兼容。

统一多个类的接口。一般可以结合工厂方法使用。

感谢各位的阅读,以上就是"Adapter适配器模式怎么应用"的内容了,经过本文的学习后,相信大家对Adapter适配器模式怎么应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

适配 模式 接口 适配器 不同 工作 例子 意图 结构 组合 就是 设计模式 问题 设计 应用 内容 情况 插座 能力 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司税收优惠 河南真二互联网科技有限公司 互联网下的科技发展 中国互联网科技发展 未来的互联网科技 上游互联网科技 狮子座互联网科技培训 长亮科技互联网金融 科技互联网创业计划书 老年人脱离互联网科技的作文 佳云科技和互联网广告 昭通互联网科技选哪家 互联网科技与大数据专业 注册互联网科技公司经营范围大全 互联网新科技动漫ppt素材 互联网科技融合创新 风投北京互联网科技 江苏互联网科技小贷 广西科技产业互联网是什么 福仕德教育科技互联网 金融科技创新监管互联网金融 互联网科技ppt模板 互联网科技生活的内容 济南华为互联网科技产业总部基地 福州新华互联网科技学校 知乎 互联网科技项目计划书材料类 福建科技产业互联网发展 中国科技创新与世界互联网大会 互联网科技快讯热点 互联网科技的前景
0