写点什么

策略模式

用户头像
猴子胖胖
关注
发布于: 2020 年 11 月 08 日



golang 设计模式

https://github.com/kaysun/go_design_pattern.git



策略模式,当在做一件事时有不同的方法时,即可定义成不同的策略,抽象出策略接口,然后由调用方选择使用什么样的方法完成工作。



strategy.go

// package strategy 策略模式。以商场促销方案为例。
package strategy
import "fmt"
// Strategy 策略接口
type Strategy interface {
// Promotion 促销
Promotion()
}
// ConcreteStrategyA 促销策略A
type ConcreteStrategyA struct {
}
// ConcreteStrategyB 促销策略B
type ConcreteStrategyB struct {
}
// ConcreteStrategyC 促销策略C
type ConcreteStrategyC struct {
}
func (strategy ConcreteStrategyA) Promotion() {
fmt.Println("618促销")
}
func (strategy ConcreteStrategyB) Promotion() {
fmt.Println("99促销")
}
func (strategy ConcreteStrategyC) Promotion() {
fmt.Println("双十一促销")
}



client.go

// package strategy 策略模式。以商场促销方案为例。
package strategy
import "fmt"
// Strategy 策略接口
type Strategy interface {
// Promotion 促销
Promotion()
}
// ConcreteStrategyA 促销策略A
type ConcreteStrategyA struct {
}
// ConcreteStrategyB 促销策略B
type ConcreteStrategyB struct {
}
// ConcreteStrategyC 促销策略C
type ConcreteStrategyC struct {
}
func (strategy ConcreteStrategyA) Promotion() {
fmt.Println("618促销")
}
func (strategy ConcreteStrategyB) Promotion() {
fmt.Println("99促销")
}
func (strategy ConcreteStrategyC) Promotion() {
fmt.Println("双十一促销")
}



strategy_test.go

package strategy
import "testing"
func Test(t *testing.T) {
t.Run("strategy: ", SaleStrategy)
}
func SaleStrategy(t *testing.T) {
var strategy Strategy
strategy = NewSaleStrategy(SaleTypeA)
strategy.Promotion()
strategy = NewSaleStrategy(SaleTypeB)
strategy.Promotion()
strategy = NewSaleStrategy(SaleTypeC)
strategy.Promotion()
}



输出

618促销
99促销
双十一促销



发布于: 2020 年 11 月 08 日阅读数: 34
用户头像

猴子胖胖

关注

6年ios开发,1年golang开发 2020.05.09 加入

还未添加个人简介

评论

发布
暂无评论
策略模式