• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

设计模式go语言实现----适配器模式Adapter

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在现实生活中,我们的笔记本电脑的工作电压大多数都是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够工作在220V的电压下工作?答案:引入一个电源适配器,俗称变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容。
软件开发的过程中,有时候也会存在这种不兼容的情况,我们也可以像引入一个称之为适配器的角色来协调这些存在不兼容的结构,即我们下面要讲的设配器模式。

1 定义

适配器(Adapter)模式:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。

UML类图如下:

适配器模式一般包含3个角色:

  • Target(目标接口角色): 定义了客户所需要的接口
  • Adapter(适配器角色): 实现了Target接口,并且还能调用另一个接口,起到适配的作用
  • Adaptee(被适配角色): 即被适配的角色,定义了一个已经存在的接口

2 go语言实现

2.1 目标Target接口

type Target interface {
	Request()
}

2.2 被适配Adaptee接口

type Adaptee interface {
	SpecificRequest()
}

type XiaoMiAdaptee struct{}

func (xma XiaoMiAdaptee) SpecificRequest() {
	fmt.Println("This is a specific request from Xiao Mi")
}

type HuaWeiAdaptee struct{}

func (hwa HuaWeiAdaptee) SpecificRequest() {
	fmt.Println("This is a specific request from Hua Wei")
}

2.3 适配器Adapter角色

type Adapter struct {
	Adaptee
}

func (a Adapter) Request() {
	a.SpecificRequest()
}

这里使用了go语言中的匿名组合,所以Adapter也就拥有了SpecificRequest实例方法,又因为Go语言中非侵入式接口特征,这样的话,Adapter其实也适配Adaptee接口

2.4 使用工厂函数创建Adapter和Adaptee实例

func NewAdapter(adaptee Adaptee) Adapter {
	return Adapter{
		Adaptee: adaptee,
	}
}

func NewAdaptee(t string) Adaptee {
	switch t {
	case "XiaoMi":
		return XiaoMiAdaptee{}
	case "HuaWei":
		return HuaWeiAdaptee{}
	default:
		return nil
	}
}

2.5 测试demo

func main() {
	tAdaptee := adapter.NewAdaptee("HuaWei")
	tAdapter := adapter.NewAdapter(tAdaptee)
	tAdapter.Request()

	fmt.Println("=============================")

	tAdaptee = adapter.NewAdaptee("XiaoMi")
	tAdapter = adapter.NewAdapter(tAdaptee)
	tAdapter.Request()
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go 学习入门发布时间:2022-07-10
下一篇:
Go语言基础发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap