简介
本教程讲解Golang 编程语言 的策略设计模式
开始
策略模式是设计模式的一种。软件开发中,我们经常会遇到这样的场景,比如支付,用户支付,可以通过 支付宝 ,微信,或者银联。 他们最终的目的都是完成付钱的动作。我们可以归纳抽象这些支付渠道为相同的流程;基本的支付动作都是相同的,只不过支付实现(策略)不一样。比如调用的 api 不一样,参数不一样,签名不一样等。
我们可以定义基本的支付 interface,然后用不同的实现,完成 provider.DoPay 操作,完成支付。 这种就是最简单的策略模式。
下面以具体示例来说明如何在golang下面,完成策略模式的基础设计。
策略模式
先定义基本的interface,它是所有逻辑 的通用共有性,包含一个方法 DoPay
//定义支付的 interface
type Payment interface {
DoPay(string, string) Boolean
}
// 定义一个支付策略的结构体,里面有一个属性Payment,是支付的interface
type PaymentStrategy struct {
Payment Payment
}
//定义一个策略的方法,调用它,会调用interface的实现方法 DoPay
func (o *PaymentStrategy) DoPayAction(config, args string) int {
return o.Payment.DoPay(config, args)
}
支付宝支付
type AlipayStrategy struct{}
func (AlipayStrategy) DoPay(config, args string) int {
//TODO 这里写你具体的支付逻辑
}
p := PaymentStrategy{AlipayStrategy{}}
p.DoPayAction(config, args) // config 和args是支付相关的参数,比如支付配置信息和订单号等
微信支付
type WeixinStrategy struct{}
func (WeixinStrategy) DoPay(config, args string) int {
//TODO 这里写你具体的支付逻辑
}
p := PaymentStrategy{WeixinStrategy{}}
p.DoPayAction(config, args) // config 和args是支付相关的参数,比如支付配置信息和订单号等
总结
策略设计模式的好处,就是抽象了具体的业务逻辑,让你的代码更清晰可读,另外因为归纳了共性的方法,你后面如果需要再接入其他支付渠道,就更简单了。因为套路差不多。
在我理解,策略设计,就是封装好套路,套路差不多,不同的只是各自支付业务逻辑的实现不同。