Golang – 常用设计 Strategy Pattern
Strategy Pattern 通常是运行同样的实例,但是使用不同的策略从而获取不同的结果
- 定义好strategy的接口
// 定义策略接口
type IStrategy interface {
	Do(int, int) int
}2. 定义好Operator结构体
// Operator 结构体,包含当前的策略
type Operator struct {
	currentStrategy IStrategy
}
// 设置新的策略
func (this *Operator) SetStrategy(newStrategy IStrategy) {
	this.currentStrategy = newStrategy
}
// 计算结果,调用当前策略的 Do 方法
func (o *Operator) Calculate(i, j int) int {
	return o.currentStrategy.Do(i, j)
}3. 添加Add策略
// 定义加法策略
type Add struct {
}
// 实现加法策略的 Do 方法
func (this *Add) Do(i, j int) int {
	return i + j
}4. 添加Minus策略
// 定义减法策略
type Minus struct {
}
// 实现减法策略的 Do 方法
func (this *Minus) Do(i, j int) int {
	return i - j
}5. 使用方式
func main() {
	// 初始化 Operator 对象
	operator := Operator{}
	
	// 设置加法策略并计算
	operator.SetStrategy(&Add{})
	cal1 := operator.Calculate(1, 2)
	fmt.Println("cal1:", cal1)
	// 设置减法策略并计算
	operator.SetStrategy(&Minus{})
	cal2 := operator.Calculate(1, 2)
	fmt.Println("cal1:", cal2)
}输出结果:
cal1: 3
cal1: -1 
		Facebook评论