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() }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。