【设计模式】第8节:结构型模式之“适配器模式”

一、简介

适配器模式是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。

适配器模式角色:

  • 请求者client:调用服务的角色
  • 目标Target:定义了Client要使用的功能
  • 转换对象Adaptee:需要被适配器转换的对象
  • 适配器Adapter:实现转换功能的对象

二、分类

有类适配器和对象适配器两种,前者用继承实现,后者用组合实现。

1. 类适配器

适配器的作用是将Adaptee中的方法都转为Target接口中的方法,而适配器类Adapter继承Adaptee,实现Target接口。

go 复制代码
type target interface{} {
  func1()
  func2()
}

type Adaptee struct {
}

func (*Adaptee) fa() {  
}

func (*Adaptee) fb() {  
}

type Adapter struct {
  Adaptee
}

func (*Adapter) func1() {
  fa()
}

2. 对象适配器

跟类适配器类似,唯一的不同在于适配器Adapter对于Adaptee是组合关系,而不是继承。

go 复制代码
type target interface{} {
  func1()
  func2()
}

type Adaptee struct {
}

func (*Adaptee) fa() {  
}

func (*Adaptee) fb() {  
}

type Adapter struct {
  adptee Adaptee
}

func (*Adapter) func1() {
  adptee.fa()
}

func (*Adapter) func2() {
  adptee.fb()
}

三、使用场景

1. 类适配器和对象适配器的选择

类适配器和对象适配器选用哪个,主要看Adaptee的接口个数,以及Adaptee和Target的契合程度。

  • 如果Adaptee的接口不多,选哪个都可以;
  • 如果Adaptee的接口很多
    • 如果Adaptee和Target的接口定义大多相同,则推荐使用类适配器,减少开发量。
    • 如果Adaptee和Target的接口定义大多不同,则推荐使用对象适配器,代码可以更灵活。

2. 适用场景

  1. 封装有缺陷的接口设计
  2. 统一多个类的接口设计
  3. 替换依赖的外部系统
  4. 兼容老版本接口
  5. 适配不同格式的数据
相关推荐
AI人工智能+电脑小能手19 小时前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AustinXu1 天前
从 Claude Code 到 Claude Tag,Harness Engineering 走到了组织这一层
设计模式·团队管理
剧中有戏1 天前
单例模式从入门到精通:一个数据库连接池的完整剖析
设计模式
胡萝卜术1 天前
编译期与运行期的双重防线:从 TypeScript 类型之争到 LLM 输出的自动化择优
前端·设计模式·面试
货拉拉技术1 天前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
KhalilRuan1 天前
设计模式小记
设计模式
卡牌RWA研究院1 天前
Relique:一张精品卡牌如何从收藏品变成可交易的链上资产?
设计模式·金融·区块链·创业创新
剧中有戏2 天前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式
MC皮蛋侠客2 天前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
莫得感情 o2 天前
设计模式 18 · 状态模式
设计模式·状态模式