适配器模式是一种结构型设计模式,它允许具有不兼容接口的对象进行协作。这种模式通常用于以下情况:

  1. 当你想使用某个现有类,但其接口与你的代码不兼容时。
  2. 当你想重用多个现有子类,但它们缺少一些无法添加到超类中的通用功能时。
    适配器模式的解决方案是创建一个适配器类,它充当你的代码和遗留类、第三方类或任何其他具有奇怪接口的类之间的翻译器。适配器包装了一个对象,隐藏了其背后的转换复杂性。被包装的对象甚至不知道适配器的存在。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main

import "fmt"

func main() {
a := NewAdapter()
a.Pay("张三", 12, "aliyun")
a.Pay("李四", 200, "wx")
}

type AliyunPayInterface interface {
Pay(name string, payment float64)
}

type AliyunPay struct{}

func (a AliyunPay) Pay(name string, payment float64) {
fmt.Printf("用户【%s】支付宝支付金额【%f】元 \n", name, payment)
}

type WxPayInterface interface {
Pay(name string, payment float64)
}
type WxPay struct {
}

func (w WxPay) Pay(name string, payment float64) {
fmt.Printf("用户【%s】微信支付金额【%f】元 \n", name, payment)
}

type Apadter struct {
AliyunPayInterface
WxPayInterface
}

func (a Apadter) Pay(name string, payment float64, channel string) {
if channel == "aliyun" {
a.AliyunPayInterface.Pay(name, payment)
} else if channel == "wx" {
a.WxPayInterface.Pay(name, payment)
} else {
fmt.Printf("不支持的支付渠道")
}
}

func NewAdapter() Apadter {
return Apadter{
AliyunPay{},
WxPay{},
}
}