策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换
业务逻辑

代码实现
代码路径:https://github.com/XBoom/DesignPatterns/tree/main/16_Strategy
-
定义一个策略接口,其中包含一个方法
Execute()
,代表具体的算法1
2
3
4// Strategy 策略接口
type Strategy interface {
Execute(num1, num2 int) int
} -
创建多个实现了策略接口的具体策略类,分别实现不同的算法
1
2
3
4
5
6
7
8
9
10
11
12
13// ConcreteStrategyAdd 具体策略类 - 加法
type ConcreteStrategyAdd struct{}
func (s *ConcreteStrategyAdd) Execute(num1, num2 int) int {
return num1 + num2
}
// ConcreteStrategySubtract 具体策略类 - 减法
type ConcreteStrategySubtract struct{}
func (s *ConcreteStrategySubtract) Execute(num1, num2 int) int {
return num1 - num2
} -
创建一个上下文结构体,用于调用具体的算法
1
2
3
4
5
6
7
8
9
10
11
12// Context 上下文类
type Context struct {
strategy Strategy
}
func (c *Context) SetStrategy(strategy Strategy) {
c.strategy = strategy
}
func (c *Context) ExecuteStrategy(num1, num2 int) int {
return c.strategy.Execute(num1, num2)
}
运行
1 | context := &Context{} |
结果
1 | 加法策略结果: 15 |
总结
- 当想使用对象中各种不同的算法变体,并希望能在运行时切换算法时
- 可以将算法的实现和使用算法的代码隔离开来
- 开闭原则。 无需对上下文进行修改就能够引入新的策略