Golang – 常用设计 Strategy Pattern

Strategy Pattern 通常是运行同样的实例,但是使用不同的策略从而获取不同的结果

  1. 定义好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

Loading

Facebook评论