【设计模式】第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. 适配不同格式的数据
相关推荐
玖玥拾3 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
geovindu7 小时前
go: Broadcast Pattern
开发语言·后端·设计模式·golang·广播模式
我爱cope7 小时前
【Agent智能体23 | 规划-规划工作流】
人工智能·设计模式·语言模型·职场和发展
lengjingzju8 小时前
符·形·音·意(SFEM):一种面向通用智能的四维认知架构
设计模式·ai·学习方法
贵慜_Derek9 小时前
《从零实现 Agent 系统》连载 23|Skill 体系与 Skill Creator:能力打包与迭代
人工智能·设计模式·架构
张小姐的猫10 小时前
【Linux】多线程 —— 线程池 | 单例模式 | 常见锁
linux·运维·服务器·c++·单例模式·设计模式·策略模式
老码观察10 小时前
设计模式实战解读(十二):状态模式——干掉状态机里的 if-else 地狱
设计模式·状态模式
我爱cope11 小时前
【Agent智能体24 | 规划-创建和执行LLM计划】
人工智能·设计模式·语言模型·职场和发展
Hillain11 小时前
软件设计师设计模式
java·开发语言·经验分享·笔记·算法·设计模式·软考
zhengfei61120 小时前
第3章 Agent 类型分类与设计模式
设计模式