模式定义

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)

类图

要点总结

  • Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行交换
  • Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是解耦合。含有许多条件判断语句的代码通常都需要Strategy模式
  • 如果Strategy对象没有实例变量,那么各个上下文可以共享一个Strategy对象,从而节省对象开销

Go语言代码实现

工程目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N7fDlqPO-1626705006764)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d34aa329b7c4d359b25560947dfbce7~tplv-k3u1fbpfcp-watermark.image)]


strategy.go

package Strategy//策略接口
type Strategy interface {Execute()
}

strategyA.go

package Strategyimport "fmt"//策略A
type strategyA struct {}//实现接口
func (s *strategyA) Execute(){fmt.Println("A plan executed.")
}//简单工厂方法
func NewStrategyA() Strategy {return &strategyA{}
}

strategyB.go

package Strategyimport "fmt"//策略B
type strategyB struct {}//实现接口
func (s *strategyB) Execute() {fmt.Println("B plan executed.")
}//简单工厂方法
func NewStrategyB() Strategy {return &strategyB{}
}

context.go

package Strategy//上下文,也可以理解为主逻辑
type Context struct {strategy Strategy
}//多态方法
func NewContext() *Context {return &Context{}
}//多态设置具体的对象
func (c *Context) SetStrategy(strategy Strategy) {c.strategy = strategy
}//多态方法执行具体策略
func (c *Context) Execute(){c.strategy.Execute()
}

strategy_test.go

package Strategyimport "testing"func TestContext_Execute(t *testing.T) {strategyA := NewStrategyA()c := NewContext()c.SetStrategy(strategyA)c.Execute()strategyB := NewStrategyB()c.SetStrategy(strategyB)c.Execute()
}

设计模式--策略(Strategy)模式相关推荐

  1. 设计模式学习笔记——策略(Strategy)模式

    设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...

  2. 实验一:行为型设计模式之Strategy模式

    实验一:行为型设计模式之Strategy模式 https://blog.csdn.net/weixin_43206161 一.实验目的 熟练使用JAVA实现行为型设计模式-策略模式,理解设计模式的模式 ...

  3. java语言商场打折_Java封装商场打折策略(Strategy模式)

    有了OO的基础后,开始认真学习设计模式. 首先学习的是Strategy,下面就封装商场打折策略来分析下策略模式是怎样一回事. 商场每逢节假日都会对不同的商品采用不同的打折策略,首先卖苹果的说我的苹果要 ...

  4. java if打折怎么算_Java封装商场打折策略(Strategy模式)

    有了OO的基础后,开始认真学习设计模式. 首先学习的是Strategy,下面就封装商场打折策略来分析下策略模式是怎样一回事. 商场每逢节假日都会对不同的商品采用不同的打折策略,首先卖苹果的说我的苹果要 ...

  5. 策略(strategy)模式

    Head First一书中对于策略(strategy)模式的正式定义是:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 为了介绍这个算法,书中讲了 ...

  6. 乱砍设计模式之一 -- STRATEGY模式

    STRATEGY模式---赵子龙单骑救主 junguo STRATEGY在中文中被译成了策略,我感觉这个意思并不妥切,但翻英文词典能得到的翻译也只有这个,我的词典比较简单,不知道是否还有其它意思?如果 ...

  7. C#设计模式-策略者模式

    状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 一. 策略者(Stragety)模式 在现实 ...

  8. 设计模式-策略Strategy

    策略Strategy,策划,或者成规划:部署:统筹安排.比如出行策略:有飞机.火车.公交车.自行车等,每一种出行方式都是一种策略,策略可随时替换. 策略模式(Strategy) 定义了一组算法,将每个 ...

  9. C++设计模式实现--策略(Strategy)模式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/L_Andy/article/details/30489331 一. 举例说明 曾经做了一个程序,程序 ...

最新文章

  1. 图像分割--PixelNet: Representation of the pixels, by the pixels, and for the pixels
  2. 统计app用户在线时长_优质的APP推广渠道,应该如何筛选?
  3. 关于Django部分
  4. 飞畅科技-工业交换机接口类型介绍
  5. mysql管理数据 并上传至云端_怎样将MySQL数据库上传到服务器
  6. pp-tracking ubuntu 18.04使用GPU推理出现Segmentation fault
  7. 语音识别如今发展到什么阶段了?
  8. 下载devc++和codeblocks记录
  9. 云课堂智慧职教网页版登录入口_云课堂智慧职教网页版
  10. win7系统中建立家庭局域网
  11. 计算机windows10怎么找word,Win10 word路径在哪?Win10如何修改word路径
  12. 图解FDISK与FORMAT命令分区与格式化
  13. MacBook Pro 2018款充电口不能用解决办法
  14. 【前端框架】Element UI Dialog 组件中执行 DOM 操作异常问题的分析与处理
  15. 考研数据结构之线性表(1.7)——练习题之分离单链表的奇数偶数(C表示)
  16. Java经典面试题答案解析(1-80题)
  17. AttitudeFactor.h/AttitudeFactor.cpp
  18. HDU 5445 Food Problem
  19. 我讨厌慢节奏工作,我喜欢充实生活
  20. pdf 转换格式txt,doc工具 免费

热门文章

  1. mysql 分析执行计划的效率_MySQL执行计划分析
  2. 二层交换配置完ping失败_设置完端口聚合之后就ping不通了!!!
  3. 接口java_JAVA 初识接口
  4. java dictionary 实例化_Java Dictionary put()用法及代码示例
  5. asp绑定gridview属性_理解ASP.NET Core中的模型验证
  6. 提高数据中心空间使用率,助力数字新基建
  7. 全面解析RS232、RS485、RS422、RJ45接口的区别和各自的应用
  8. 成功解决Exception “unhandled ImportError“cannot import name ‘imread‘ from ‘scipy.misc‘
  9. 成功解决TypeError: data type ‘category‘ not understood
  10. ML之LiRLassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估