[Go自学笔记]Go的委托模式

本文通过Go语言的接口设计和实例,探讨了Go的委托模式,以充电器和手机为例,解释了如何通过接口实现不同实现的互换。文章引用nsq-go库中的例子,展示了委托模式在消息队列中的应用,加深了对Go接口编程的理解。
摘要由CSDN通过智能技术生成

go-nsq里的委托模式

Go的接口设计是一绝,可以把接口看做一张设计图,实现结构体的时候只要根据“设计图”的标准进行“加工”,那么该结构体的实例便可用于符合设计要求的地方。就如工厂的工程师先画好零件的设计图(interface),然后根据设计图制作零件模具(struct),这样通过模具生产出来的零件(instances)都是符合设计标准,可以用到其他地方去的。

Go的接口设计更符合现实生产的工厂模型,也给程序设计带来了更多的灵活性。通过更换相同接口的不同结构体实例,我们可以在保证整体功能方向的情况下(输入与输出格式确定),更改具体功能的实现方式。

现实里的生产关系一般是各个不同的厂家,根据相同的标准进行生产,以达到产品通用的目的。例如对于TypeC接口的安卓手机而言,只要是TypeC接口的充电线与符合当地交流电标准的充电头,就可以为手机充电(当然具体功率会有差异)。

就拿笔者手上的小米11来说,其本身除了支持最高11V5A的55W充电,还兼容其他的充电协议,例如PD3.0(27W),QC3.0(18W),如果使用Go来实现,大概就是这样的:

先有标准的TypeC充电接口统一标准:

// TypeC标准的充电接口设计
type ChargeDelegate interface {
   
	OnCharge()
}

然后小米11根据该标准设计了充电接口:

type Mi11 struct {
   
	//...
	Charge ChargeDelegate //充电接口
	//...
}

很多充电器也是根据标准设计的,当然也包括小米11的原装充电器:

// 原装充电器
type originalCharge struct{
   }
func (c *originalCharge) OnCharge() {
   
	fmt.Printf("Charging in %d power\n", 5*11) //因为是原装的,走私有协议,所以有55w的满功率输出
}

// 第三方PD充电器
type thirdPDCharge struct{
   }
func (c *thirdPDCharge) OnCharge() {
   
	fmt.Printf("Charging in %d power\n", 3*9) //因为是第三方,对接不了私有协议,所以最高只有27w
}

来模拟一下可能的使用情景:

func main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值