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评论