【设计模式】第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. 适配不同格式的数据
相关推荐
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
霁月风11 小时前
设计模式——适配器模式
c++·适配器模式
WaaTong12 小时前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
WaaTong14 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
霁月风14 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
暗黑起源喵17 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
wrx繁星点点1 天前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
金池尽干1 天前
设计模式之——观察者模式
观察者模式·设计模式
也无晴也无风雨1 天前
代码中的设计模式-策略模式
设计模式·bash·策略模式
捕鲸叉1 天前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式