Golang设计模式之适配器模式介绍和代码示例

 更新时间:2023年06月19日 09:29:48   作者:demo007x  
适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作,可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口,本文将通过代码示例详细给大家介绍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.

以上就是Golang适配器模式介绍和代码示例的详细内容,更多关于Golang适配器模式的资料请关注脚本之家其它相关文章!

相关文章

  • 详解Go语言如何实现一个最简化的协程池

    详解Go语言如何实现一个最简化的协程池

    这篇文章主要为大家详细介绍了Go语言如何实现一个最简化的协程池,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以了解一下
    2023-10-10
  • Go并发编程之死锁与活锁的案例分析

    Go并发编程之死锁与活锁的案例分析

    死锁就是在并发程序中,两个或多个线程彼此等待对方完成操作,从而导致它们都被阻塞,并无限期地等待对方完成;活锁就是程序一直在运行,但是无法取得进展。本文将从一些案例出发,分析一下它们,希望对大家有所帮助
    2023-04-04
  • Go语言入门exec的基本使用示例

    Go语言入门exec的基本使用示例

    这篇文章主要为大家介绍了Go语言入门exec在go语言中的基本使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Go Resiliency库中timeout实现原理及源码解析

    Go Resiliency库中timeout实现原理及源码解析

    Go-Resiliency库中的timeout是一种基于协程的超时机制,通过创建协程来执行任务并设置超时时间,若任务执行时间超时则中止协程并返回错误,需要详细了解可以参考下文
    2023-05-05
  • Go Module常用命令及如何使用Go Module

    Go Module常用命令及如何使用Go Module

    go module是go官方自带的go依赖管理库,在1.13版本正式推荐使用,这篇文章主要介绍了Go Module常用命令及如何使用Go Module,需要的朋友可以参考下
    2024-02-02
  • Golang分布式锁简单案例实现流程

    Golang分布式锁简单案例实现流程

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源时,需要通过一些互斥手段来防止彼此之间的干扰以保证一致性,在这种情况下,就需要使用分布式锁了
    2022-12-12
  • go语言调用c语言的so动态库的实现

    go语言调用c语言的so动态库的实现

    在Go语言开发过程中,有时需要调用C或C++编写的so动态库,本文介绍了如何在Go语言中调用so库的步骤和注意事项,包括环境准备、编译生成.so文件、Go文件编写、以及可能遇到的问题和解决方法,感兴趣的可以了解一下
    2024-10-10
  • Go语言标准库sync.Once使用场景及性能优化详解

    Go语言标准库sync.Once使用场景及性能优化详解

    这篇文章主要为大家介绍了Go语言标准库sync.Once使用场景及性能优化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 解决Goland 同一个package中函数互相调用的问题

    解决Goland 同一个package中函数互相调用的问题

    这篇文章主要介绍了解决Goland 同一个package中函数互相调用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言非main包编译为静态库并使用的示例代码

    Go语言非main包编译为静态库并使用的示例代码

    本文以Windows为例,介绍一下如何将Go的非main包编译为静态库,用户又将如何使用。通过实际项目创建常规工程,通过示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07

最新评论