【设计模式】第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. 适配不同格式的数据
相关推荐
Deschen11 小时前
设计模式-工厂模式
设计模式·简单工厂模式
阿无,11 小时前
Java设计模式之工厂模式
java·开发语言·设计模式
Camel卡蒙13 小时前
DDD架构——充血模型、领域模型
java·设计模式·架构
rongqing201913 小时前
Google 智能体设计模式:目标设定与监控
设计模式
weixin_4454766814 小时前
一天一个设计模式——开闭原则
服务器·设计模式·开闭原则
李广坤14 小时前
模板方法模式(Template Method Pattern)
设计模式
Asort20 小时前
JavaScript设计模式(十二)——代理模式 (Proxy)
前端·javascript·设计模式
简小瑞20 小时前
VSCode源码解密:Event<T> - 类型安全的事件系统
前端·设计模式·visual studio code
Mr_WangAndy20 小时前
C++设计模式_结构型模式_外观模式Facade
c++·设计模式·外观模式
李广坤20 小时前
策略模式(Strategy Pattern)
设计模式