简介

本教程讲解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是支付相关的参数,比如支付配置信息和订单号等

  

总结

策略设计模式的好处,就是抽象了具体的业务逻辑,让你的代码更清晰可读,另外因为归纳了共性的方法,你后面如果需要再接入其他支付渠道,就更简单了。因为套路差不多。

在我理解,策略设计,就是封装好套路,套路差不多,不同的只是各自支付业务逻辑的实现不同。