策略模式是一种设计模式,它允许我们将不同的算法或策略封装成单独的对象,以便能够在运行时选择不同的算法或策略。
在Go语言中,我们可以使用接口来实现策略模式。首先定义一个接口,该接口将定义所有可能的算法或策略:
type Strategy interface {
DoOperation(int, int) int
}
接下来,我们可以定义一些具体的算法或策略,这些算法或策略必须实现上述接口:
type Add struct{}
func (a *Add) DoOperation(num1 int, num2 int) int {
return num1 + num2
}
type Subtract struct{}
func (s *Subtract) DoOperation(num1 int, num2 int) int {
return num1 - num2
}
最后,我们可以创建一个Context结构体,它将包含对特定策略的引用:
type Context struct {
strategy Strategy
}
func (c *Context) ExecuteStrategy(num1 int, num2 int) int {
return c.strategy.DoOperation(num1, num2)
}
现在我们可以创建一个Context对象,并将其设置为使用任何一种算法或策略:
func main() {
context := &Context{&Add{}}
fmt.Println("10 + 5 = ", context.ExecuteStrategy(10, 5))
context = &Context{&Subtract{}}
fmt.Println("10 - 5 = ", context.ExecuteStrategy(10, 5))
}
以上代码将输出:
10 + 5 = 15
10 - 5 = 5
通过这种方式,我们可以轻松地切换不同的算法或策略。