什么是策略模式?
策略模式(Strategy Pattern)是一种行为型设计模式,其核心在于运行时算法的灵活切换。该模式通过将算法族封装为独立的策略类,实现策略间的自由替换,同时确保客户端代码不受算法变更影响。
策略模式UML图如下:
策略模式主要有三种角色:
1)Context(上下文):维护策略对象的引用并提供执行接口。
2)Strategy(策略接口):算法策略的通用接口定义,上下文所执行的方法。
3)ConcreteStrategy(具体策略):实现算法不同变体的类。
如何实现策略模式?
定义策略接口类Strategy,提供Exec方法,代码示例如下:
// Strategy 策略,定义通用接口
type Strategy interface {
// Exec 策略执行方法
Exec()
}
定义三个具体策略实现类:ConcreteStrategyA、ConcreteStrategyB和ConcreteStrategyC,这些类都实现了Strategy接口 ,代码示例如下:
// ConcreteStrategyA 具体策略A
type ConcreteStrategyA struct {
// 策略名称
Name string
}
// Exec 策略执行方法
func (c *ConcreteStrategyA) Exec() {
fmt.Printf("策略[%s]执行\n", c.Name)
}
// ConcreteStrategyB 具体策略B
type ConcreteStrategyB struct {