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