GoLang设计模式18 - 适配器模式
说明
适配器模式是一种结构型设计模式。我们用常用的两种笔记本电脑来说明一下这种设计模式。
我们常用的笔记本无非是这两大类:
- Macbook Pro
- Windows Laptop
当前这两类笔记本常见的一个区别大概是USB接口的类型了:
- Macbook Pro的USB接口现在多为扁圆形的Type-C接口
- Windows笔记本的USB接口则多为方形的Type-A接口
现在我手上有一个Type-C扁圆口的U盘,但是我用的笔记本Windows,这该怎么办呢?
这也是编程时常遇到的一种问题:
我们有一个已经封装严谨的类(如Windows笔记本),它提供了一些功能并指定对接参数的类型(如Type-A方形USB接口)。但是现在有一个不同类型的实例(Type-C扁圆形口U盘),也想用这个已经封装好的类提供的功能。此时该怎么做?
这时就可以应用适配器模式了。我们创建一个Adapter
类,他可以提供如下功能:
- 按照已有类指定的参数类型进行实现
- 转译调用方的请求
在我们前面的例子中,这个Adapter
就可以是一个转接器,它接收Type-C扁圆形接口的输入,提供Type-A方形接口的数据输出,从而能让我们顺利地使用上手头的方口U盘。
UML类图
看下类图:
然后是前面举的例子的类图:
代码
示例代码如下:
computer.go
1
2
3
|
type computer interface { insertInSquarePort() } |
mac.go
1
2
3
4
5
6
|
type mac struct { } func (m *mac) insertInSquarePort() { fmt.Println( "Insert square port into mac machine" ) } |
windows.go
1
2
3
4
5
|
type windows struct {} func (w *windows) insertInCirclePort() { fmt.Println( "Insert circle port into windows machine" ) } |
windowsAdapter.go
1
2
3
4
5
6
7
|
type windowsAdapter struct { windowMachine *windows } func (w *windowsAdapter) insertInSquarePort() { w.windowMachine.insertInCirclePort() } |
输出内容:
1
2
|
Insert square port into mac machine Insert circle port into windows machine |
代码已上传至GitHub: zhyea / go-patterns / adapter-pattern
END!
仅是学习笔记,难免出错,望不吝指点
转 https://www.cnblogs.com/amunote/p/15734214.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)