Golang设计模式之适配器模式详细讲解

作者:Ch3n 时间:2024-05-28 15:22:53 

适配器模式

适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。

适配器可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口。

Golang设计模式之适配器模式详细讲解

概念示例

这里有一段客户端代码, 用于接收一个对象 (Lightning 接口) 的部分功能, 不过我们还有另一个名为 adaptee 的对象 (Windows 笔记本), 可通过不同的接口 (USB 接口) 实现相同的功能

这就是适配器模式发挥作用的场景。 我们可以创建这样一个名为 adapter 的结构体:

遵循符合客户端期望的相同接口 (Lightning 接口)。

可以适合被适配对象的方式对来自客户端的请求进行 “翻译”。 适配器能够接受来自 Lightning 连接器的信息, 并将其转换成 USB 格式的信号, 同时将信号传递给 Windows 笔记本的 USB 接口。

client.go: 客户端代码

package main
import "fmt"
type Client struct {
}
func (c *Client) InsertLightningConnectorIntoComputer(com Computer) {
   fmt.Println("Client inserts Lightning connector into computer.")
   com.InsertIntoLightningPort()
}

computer.go: 客户端接口

package main
type Computer interface {
   InsertIntoLightningPort()
}

mac.go: 服务

package main
import "fmt"
type Mac struct {
}
func (m *Mac) InsertIntoLightningPort() {
   fmt.Println("Lightning connector is plugged into mac machine.")
}

windows.go: 未知服务

package main
import "fmt"
type Windows struct{}
func (w *Windows) insertIntoUSBPort() {
   fmt.Println("USB connector is plugged into windows machine.")
}

windowsAdapter.go: 适配器

package main
import "fmt"
type WindowsAdapter struct {
   windowMachine *Windows
}
func (w *WindowsAdapter) InsertIntoLightningPort() {
   fmt.Println("Adapter converts Lightning signal to USB.")
   w.windowMachine.insertIntoUSBPort()
}

main.go

package main
func main() {
   client := &Client{}
   mac := &Mac{}
   client.InsertLightningConnectorIntoComputer(mac)
   windowsMachine := &Windows{}
   windowsMachineAdapter := &WindowsAdapter{
       windowMachine: windowsMachine,
   }
   client.InsertLightningConnectorIntoComputer(windowsMachineAdapter)
}

output.txt: 执行结果

Client inserts Lightning connector into computer.
Lightning connector is plugged into mac machine.
Client inserts Lightning connector into computer.
Adapter converts Lightning signal to USB.
USB connector is plugged into windows machine.

来源:https://ch3nnn.blog.csdn.net/article/details/126918804

标签:Go,适配器模式,设计模式
0
投稿

猜你喜欢

  • Python字典中的键映射多个值的方法(列表或者集合)

    2021-03-07 04:50:40
  • SQL中Groupby和Having的使用方法

    2008-12-29 13:54:00
  • 分享10个有趣的Python程序

    2023-12-21 19:53:58
  • 使用Python OpenCV为CNN增加图像样本的实现

    2023-10-13 02:51:31
  • python编写adb截图工具的实现源码

    2021-03-24 08:50:15
  • python 将日期戳(五位数时间)转换为标准时间

    2021-09-14 06:36:47
  • Python人工智能深度学习CNN

    2023-11-27 06:19:15
  • SQL 重复记录问题的处理方法小结

    2024-01-16 14:56:36
  • 仿微博字符限制效果实现代码

    2024-04-28 09:51:18
  • 对Python实现简单的API接口实例讲解

    2023-11-20 03:27:04
  • 在Python的struct模块中进行数据格式转换的方法

    2021-09-26 14:24:40
  • Django Rest framework解析器和渲染器详解

    2021-06-30 20:46:25
  • python中playwright结合pytest执行用例的实现

    2022-12-13 14:28:58
  • Python学习之字符串常用操作详解

    2022-07-14 18:54:48
  • Python并发编程实例教程之线程的玩法

    2022-02-02 08:17:41
  • 最新python 字符串数组互转问题

    2023-07-07 18:34:06
  • python 监测内存和cpu的使用率实例

    2022-07-03 23:49:49
  • ASP 获取腾讯IP地址的代码

    2011-02-26 11:19:00
  • Python调用C语言的方法【基于ctypes模块】

    2021-03-08 20:31:24
  • 在Django的视图中使用数据库查询的方法

    2024-01-14 20:03:20
  • asp之家 网络编程 m.aspxhome.com