设计模式:Go适配器模式
1.简介
适配器模式用于转换一种接口适配另一种接口。
大白话:
原来我有一个笔记只能使用HDMI视频输出,但现在我需要VGA输出,我可以在买一个转换器(适配器),将我的HDMI接口转换成VGA接口。
2.图示
3.代码
3.1.树形图
adapter
├── adapter.go
├── adapter_test.go
├── notebook.go
└── out.go
3.2.代码
out.go
package adapter
// HDMI HDMI输出接口
type HDMI interface {
HDMIOut() string
}
// VGA VGA输出接口
type VGA interface {
VGAOut() string
}
adapter.go
package adapter
import "strings"
// HDMIToVGA 适配器: HDMI转VGA
type HDMIToVGA struct {
displayContent string
}
func (h *HDMIToVGA) VGAOut() string {
return "VGA输出: " + h.displayContent
}
// NewAdapterHDMIToVGA 适配器工厂函数
func NewAdapterHDMIToVGA(hdmi HDMI) VGA {
hdmiContent := hdmi.HDMIOut()
// 提取原始内容
displayContent := strings.Split(hdmiContent, ": ")[1]
return &HDMIToVGA{displayContent: displayContent}
}
notebook.go
package adapter
// Notebook 笔记本电脑
type Notebook struct {
// 需要显示的内容
DisplayContent string
}
// HDMIOut 笔记本HDMI视频输出
func (n *Notebook) HDMIOut() string {
return "HDMI输出: " + n.DisplayContent
}
adapter_test.go
package adapter
import "testing"
func TestAdapter(t *testing.T) {
var notebook HDMI = &Notebook{"这是显示的内容。"}
t.Log(notebook.HDMIOut())
// 将hdmi转成vga
var vga VGA = NewAdapterHDMIToVGA(notebook)
t.Log(vga.VGAOut())
}
3.3.测试
=== RUN TestAdapter
adapter_test.go:7: HDMI输出: 这是显示的内容。
adapter_test.go:10: VGA输出: 这是显示的内容。
--- PASS: TestAdapter (0.00s)
PASS