package main import "fmt" //策略模式总结 //定义一个上下文的类,里面的策略元素被策略接口限制。 //实现不同的策略类 //调用的时候把策略类实例作为参数传递进去,然后调用。 //对扩展开放,对修改关闭 //实现上下文的类 type Context struct { Strategy Strategy } func NewContext(Strategy Strategy) *Context { return &Context{ Strategy: Strategy, } } //抽象的策略 type Strategy interface { Do() } //实现具体的策略1 type Strategy1 struct { } func (s *Strategy1) Do() { fmt.Println("具体的策略1") } //实现具体的策略2 type Strategy2 struct { } func (s *Strategy2) Do() { fmt.Println("具体的策略2") } //具体的实现策略三 type Strategy3 struct { } func (s *Strategy3) Do() { fmt.Println("具体的策略3") } func Strategy1Fun() { context := NewContext(&Strategy1{}) //策略1 context.Strategy.Do() } func Strategy2Fun() { //策略2 context2 := NewContext(&Strategy2{}) context2.Strategy.Do() } func main() { Strategy1Fun() Strategy2Fun() }