1 定义
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响道使用算法的客户。
模式动机:
为了解决在有多种算法相似的情况下,使用if…else所带来的复杂和难以维护性,这样定义一系列的算法,把它们一个个封装起来,并且使它们相互替换。
策略模式包含以下几个角色:
- Context(环境类):负责使用算法策略,其中维持了一个抽象策略类的引用实例
- Strategy(抽象策略类):所有策略类的父类,为所支持的策略算法声明了抽象方法,可以为接口
- ConcreteStrategy(具体策略类):实现了在抽象策略类中声明的方法
UML类图:
2 go语言实现
2.1 实现Context
type Context struct {
strategy Strategy
}
func (c Context) Algorithm() {
c.strategy.AlgorithmInterface()
}
2.2 实现Strategy以及ConcreteStrategy
type Strategy interface {
AlgorithmInterface()
}
type StrategyA struct{}
func (sa Stra