Golang设计模式之适配器模式

适配器模式

适配器模式是一种结构型设计模式,它允许将不兼容的接口转换为一个客户端期望的另一个接口。适配器模式使得那些接口不兼容的类可以一起工作。

适配器模式中的角色和职责

  • Target(目标抽象类):定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
  • Adapter(适配器类):作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心。
  • Adaptee(适配者类):被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。

代码实现

下面是一个使用Go语言实现的适配器模式示例。假设我们有一个旧的电压系统(Adaptee),它提供5V电压,而我们的设备需要220V电压(Target)。我们将创建一个适配器(Adapter),使得5V的系统可以为220V的设备供电。

package main

import "fmt"

// Target接口定义了设备需要的接口
type Voltage220V interface {
	PlugIntoDevice() string
}

// Adapter类,实现了Voltage220V接口
type Voltage5VAdapter struct {
	Voltage5V
}

// Adaptee类,提供5V电压
type Voltage5V struct{}

func (v Voltage5V) ProvideVoltage() string {
	return "5V"
}

// Adapter通过组合Adaptee,实现Target接口
func (v Voltage5VAdapter) PlugIntoDevice() string {
	return v.ProvideVoltage() + " -> 220V"
}

func main() {
	var v220 Voltage220V = Voltage5VAdapter{Voltage5V{}}
	fmt.Println(v220.PlugIntoDevice())
}

代码说明

在这个示例中,Voltage220V接口定义了设备需要的220V电压接口。Voltage5V结构体代表一个提供5V电压的适配者。Voltage5VAdapter适配器通过组合Voltage5V适配者,实现了Voltage220V接口。这样,原本只能提供5V电压的系统,现在可以通过适配器为需要220V电压的设备供电。

适配器模式的优缺点

优点:

  1. 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。
  2. 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的。
  3. 灵活性和扩展性都非常好,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类。

缺点: 适配器中置换适配者类的某些方法可能比较麻烦。

适配器模式适用场景

  1. 系统需要使用一些现有的类,而这些类的接口不符合系统的需要,甚至没有这些类的源代码。
  2. 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类一起工作,包括一些可能在将来引进的类。

适配器模式是解决接口不兼容问题的有效手段,它提供了一种灵活的方式来整合不同接口的类。

打 赏