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

在现实生活中,我们的笔记本电脑的工作电压大多数都是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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值