结构型:一. 适配器模式

适配器模式是什么

适配器模式(Adapter Design Pattern)适配器是一种结构型设计模式, 用来将不兼容的接口转换为兼容的接口。适配器可担任两个对象间的转换器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口。

为什么用适配器模式

两个对象直接由于格式或者接口不兼容不能直接调用,所以使用适配器转换为格式或者接口。适配器不会影响原有的代码及功能。

适配器模式怎么实现

客户端

客户端通过USB来连接电脑,并且windows实现了这个接口,可以正常使用,客户端可以和windows传输数据,一切很完美。

type Computer interface {
	USB()
}

type Client struct {
}

func (c *Client) ToUSB(com Computer) {
	com.USB()
}

type Windows struct {
}

func (w *Windows) USB() {
	fmt.Println("连接成功,传输数据")
}

未知服务

这时候有个Mac电脑,它没有提供USB接口,只提供Lightning来和其他设备传输数据,这种情况我们怎么和上面的Client连接呢?Client设备只能连接提供有USB接口的电脑。

type Mac struct {
}

func (m *Mac) Lightning() {
	fmt.Println("连接成功,传输数据")
}

适配器

该适配器可以将Lightning转化为USB接口,这样就可以和上面的Client连接。

type Adapter struct {
	Mac
}

func (a *Adapter) USB() {
	a.Lightning()
}

main.go调用

package main

import (
	"demo/adapter"
)

func main() {
	windows := new(adapter.Windows)
	new(adapter.Client).ToUSB(windows)


	a := new(adapter.Adapter)
	new(adapter.Client).ToUSB(a)
}

// 运行结果:
连接成功,传输数据
连接成功,传输数据

优点

  1. 客户端通过适配器可以透明地调用目标接口。
  2. 复用了现存的类,程序员不需要修改原有代码。
  3. 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  4. 在很多业务场景中符合开闭原则。

缺点

  1. 适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。

热门相关:斗神战帝   寂静王冠   薄先生,情不由己   大神你人设崩了   寂静王冠