策略模式(Strategy Pattern)是软件设计中的一种行为型模式,它定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
策略模式涉及三个主要角色:
以下是使用Go语言实现策略模式的示例:
package main
import "fmt"
// 策略接口
type Strategy interface {
Execute(a, b int) int
}
// 具体策略A
type ConcreteStrategyA struct{}
func (s *ConcreteStrategyA) Execute(a, b int) int {
return a + b
}
// 具体策略B
type ConcreteStrategyB struct{}
func (s *ConcreteStrategyB) Execute(a, b int) int {
return a - b
}
// 上下文
type Context struct {
strategy Strategy
}
func NewContext(strategy Strategy) *Context {
return &Context{
strategy: strategy,
}
}
func (c *Context) SetStrategy(strategy Strategy) {
c.strategy = strategy
}
func (c *Context) ExecuteStrategy(a, b int) int {
return c.strategy.Execute(a, b)
}
func main() {
context := NewContext(new(ConcreteStrategyA))
fmt.Println("10 + 5 =", context.ExecuteStrategy(10, 5))
context.SetStrategy(new(ConcreteStrategyB))
fmt.Println("10 - 5 =", context.ExecuteStrategy(10, 5))
}
策略模式适用于以下场景:
优点:
缺点:
策略模式提供了一种将算法封装在独立的策略类中的方法,并在运行时决定使用哪个算法的方式,从而使得算法可以独立于使用它的客户端变化。