策略(strategy)模式

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个 阅读详情

目的:

把算法封装起来,并且使他们可以相互替换,使得算法可以独立于使用它的客户而变化。

适用情景:

1、  许多的类仅仅是行为有异(数据一致),”策略”提供了一种用多个行为中的一个行为来配置一个类的方法。

2、  需要使用不同的算法,如可以根据不同参数选取不同的效率算法。

3、  算法使用客户不应该知道的数据。

4、  替换多个if/else或switch语句

UML描述:


协作:

         Strategy和Context相互作用以实现选定的算法。当算法被调用时,Context可以将该算法所需的数据传递给该Strategy。或者Context将自身作为一个参数传递给Strategy。

         Context将它的客户的请求转发给它的Strategy。客户通常创建并传递一个ConcreteStrategy对象给Context;这样,客户可以选取不同的ConcreteStrategy与Context交互。客户选取Strategy时需要了解这些Strategy到底有何不同,此时可能不得不向客户暴露具体的实现问题。

数据接口的实现问题:

1)      定义Strategy和Context接口

一种办法是将Context将参数逐个传给Strategy的操作方法;另一种是让Context将自身作为一个参数传给Strategy的操作方法(可能有的数据是不必要的,但是接口简洁)

2)      将Strategy作为模版参数

         使用这种方法不需要给Strategy定义接口的抽象类,把Strategy作为一个模版参数也使得可以将一个Strategy和它的Context静态绑定在一起,从而提高效率。

适用条件:1) 可以在编译时选择strategy   2)strategy不需要在运行时改变

3)      使Strategy对象成为可选的

         这种情形通过定义Strategy对象的缺省行为来实现,当Context访问Strategy时需先判断Strategy是否存在,如果客户使用缺省的行为就不需要处理Strategy对象。

扩展:

Strategy也可以被封装成单例形式,在Context中通过指针方式与Strategy交换(c语言的话也可以用函数指针实现)

Wiley:International Journal for Numerical Methods in Biomedical Engineering投稿流程 中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。 阅读详情

相关推荐

Python抓取摄像头图像,进行AI识别(一)

本文介绍了如何用Python获取海康威视摄像头的图像并进行AI识别。主要内容包括:1)准备工作,包括摄像头IP设置和密码重置方法;2)使用Python的Requests库通过ISAPI接口获取实时图像;3)示例代码展示如何保存摄像头图像。整个过程为后续AI图像识别提供了基础,通过简单的Python代码即可实现专业监控设备的图像采集功能。

Hahafantuan的博客 1514

设计模式之策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

weixin_64366370的博客 1078

基于Simulink的防空导弹六自由度弹道建模与仿真实战

本文详细介绍了基于Simulink的防空导弹六自由度弹道建模与仿真方法。通过分析导弹动力学原理、Simulink环境配置、气动力建模、推进与控制系统设计等关键环节,提供了一套完整的实战指南。文章特别强调了六自由度模型在防空导弹仿真中的重要性,并分享了常见问题排查与优化建议,为相关领域工程师提供实用参考。

apple5的专栏 868

设计模式-策略模式(Strategy)

策略模式是一种行为型设计模式,它定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换或独立于使用它的客户而变化。这种类型的设计模式属于行为型模式。当在处理一项业务时,如果有多种处理方式,并且需要再运行时决定使用哪一种具体实现,就会使用策略模式。策略模式的主要组成部分包括抽象策略(Strategy)类、具体策略(Concrete Strategy)类和环境(Context)类。抽象策略类是策略接口,定义了所有支持的算法;具体策略类是实现了抽象策略接口的类,表示每种具体的算法;

miaoyl的博客 5044

汉字跨越三千年的生命力与数字时代适应性

文字作为文明载体,其演变规律始终遵循实用性与适应性的平衡。汉字作为现存最古老的文字系统,凭借形义结合的六书构造原理,实现了超方言的文化统一功能。在计算机处理方面,五笔输入法与Unicode支持证明了其技术兼容性,而视觉识别效率的先天优势使其在信息时代更具传播效力。从甲骨文识别AI到现代书法设计,汉字系统持续展现强大的文化承载力与技术适应性,这种活态传承为数字人文研究提供了独特样本。

weixin_29058331的博客 353

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 219

策略模式(Strategy)

策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。1)策略模式是一个比较容易理解和使用的设计模式,策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。

zhimokf的专栏 1253

LDRA Testbed(TBrun)软件单元测试_实例讲解(对多次调用的函数打桩)

在之前的文章《LDRA Testbed(TBrun)软件单元测试_操作指南》中,已经讲解了如何使用TBrun进行软件单元测试的基本操作步骤。本篇文章将结合实例进一步讲解被测函数中包含多次调用其他函数时,如何对其打桩来实现测试目的(详细的操作流程本文不再重述,若有不清楚的,可以结合之前的操作指南一起来看)。本文以一个被测函数作为示例,讲解了如何使用Testbed(TBrun)对涉及到多次调用其他函数的被测函数进行单元测试。本文的示例可能比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1462

策略模式

实际使用各种支付时,各自的参数必然不一样,但是策略又是接口定义好的,那应该怎么办呢,这时介于客户端和策略方法中间的上下文类就发挥作用了,可以在这里面搞点小动作,把微信和支付宝用到的参数声明在这里,然后把自己传给策略类,不同的策略类需要什么参数就取什么参数。根据前面的示例会发现,策略模式的一系列策略算法是平等的,是可以互换的,写在一起就是通过if-else结构来组织,如果此时具体的算法实现中又有条件语句,就构成了多重条件语句,使用策略模式能避免这样的多重条件语句。策略模式的本质:分离算法,选择实现。

Filwaod 1973

逆变器、转换器、DCDC、继电器等器件的原理和作用

交流电变成直流电的过程:整流==》滤波==》稳压。

m0_61973119的博客 8028

OAuth2.0集成SpringSecurity加JWT实现单点登录

单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统。也就是说只要登录一次单体系统就可以

Nicky's blog 9038

23种模式——策略模式

策略(Strategy)模式本质:分离算法,选择实现。

qq_51165184的博客 3万+

基于 Qt 的轻量化工业组态软件设计与实现

本文设计并实现了一种基于Qt框架的轻量化工业组态软件,解决了传统组态软件体积庞大、部署复杂等问题。该软件采用模块化架构,集成可视化图形编辑、设备数据采集、脚本扩展等核心功能,具有跨平台运行、资源占用低、启动速度快等特点。通过关键技术优化,实现了高效稳定的数据采集、脚本控制和网络通信,可广泛应用于工业机器人HMI、小型PLC监控等轻量化场景。测试结果表明,该软件体积约30MB,运行内存占用60-80MB,启动时间1.2秒,满足工业轻量化监控需求。未来可扩展更多工业组件和协议支持,进一步提升应用价值。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 140

Strategy (策略)模式

10.1 策略模式   Strategy 的意思是 “策略”,指的是与敌军对垒时行军作战的方法。在编程中,我们可以将其理解为 “算法”。   无论什么程序,其目的都是解决问题。而为了解决问题,我们需要编写特定的算法。使用 Stratety 模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们轻松地以不同的算法去解决同一个问题,这种模式就是 Stratety 模式。 10.2 示例程序  ...

矢落叶の博客 924

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式学习(四):Strategy策略模式

使用Strategy模式可以整体地替换算法。使用Abstract Factory模式则可以整体地替换具体工厂、零件和产品。

m0_49499183的博客 2238

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式之Strategy(策略)

设计模式之Strategy(策略)板桥里人 http://www.jdon.com 2002/03/30模式实战书籍《Java实用系统开发指南》Strategy策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用S

设计模式 Design patterns 922

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++设计模式之策略模式(Strategy)

Strategy策略模式作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 UML图: 代码实现 #include <iostream> using namespace std; class Strategy { public: ~Strategy() {} virtual void Algrithm...

月雲之霄的博客 262

1、Strategy策略模式

Strategy策略模式

378

设计模式【14】——策略模式( Strategy 模式)

Strategy 模式和 Template 模式要解决的问题是相同的,都是为了给业务逻辑具体实现和抽象接口之间的解耦。Strategy 模式将逻辑封装到一个类里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。继承:易于修改和扩展那些被复用的实现。

sinat_42974726的博客 357

[设计模式]Strategy策略模式(二)

策略模式定义是:定义算法族,分别封装起来,让它们之间可以互相替换,算法的变化独立于使用算法的客户。 我们来模拟一种情形来理解这句话。有一群鸭子,有各种颜色的鸭,他们有的会飞,有的不会飞,飞的姿态也更不相同。此时如果在每只鸭子里分别定义飞的姿态,那有成千上万中鸭子的时候就会累死。这时我们考虑使用设计模式来实现下它。 设计原则中第一条:找出应用中可能需要变化之处,把它们独立出来。当然这里我们独立的就...

超越 416

java I/O策略及Strategy设计模式

Introduction 之前一直忘记了要更新博客,课程要求,所以在空闲时写下这篇博客。Lab5是改进程序性能,而程序的性能很大程度上和I/O有关系。所以这篇博客总结了3种I/O策略以及Strategy设计模式。 I/O策略 Input: 1.Reader: File file=new File(文件路径); FileReader fr=new FileReader(file);//新建一个Fil...

weixin_43868358的博客 436

一文理解设计模式之--策略模式(Strategy)

首先定义一组算法,将每一个算法封装起来,从而使它们可以相互切换 使用场景 同样的流程,需要执行不同的策略算法,传入不同策略,执行传入对应的策略算法 代码示例 /** * Context持有Strategy的引用,并提供了调用策略的方法,所以叫Context * * @author July * @date 2020/10/20 */ public class Context { private Strategy strategy; /** * 传入策略 .

July的博客 3399

策略模式 (Strategy Pattern)

策略模式是一种行为设计模式,它将算法封装为独立对象,使它们可互换。该模式包含策略接口(定义算法)、具体策略类(实现算法)和上下文类(使用策略)。适用于需要动态切换算法或隐藏算法细节的场景。示例展示了支付方式(信用卡/支付宝/微信)和排序算法(冒泡/选择排序)的实现,通过策略模式可以灵活切换不同算法而不影响客户端代码,提高系统的扩展性和可维护性。

懵萌长颈鹿的博客 1368

如何快速掌握Strategy策略模式:算法封装的终极指南

Strategy策略模式是PHP开发中实现算法灵活切换的核心设计模式,它通过将算法家族封装成独立组件,让程序在运行时可以动态选择不同的解决方案。本文将带你快速理解这一模式的工作原理、应用场景和最佳实践,帮助你编写更具扩展性和维护性的代码。 ## 策略模式的核心价值:让算法像积木一样灵活组合 🧩 在软件开发中,我们经常遇到同一问题有多种解决方法的场景。例如排序功能可能需要按ID排序、按日期排序

gitblog_00604的博客 1172

java设计模式之strategy(策略模式)和policy模式(泛化的strategy模式)

strategy模式   定义: 运行时刻选择算法   表面上看起来,state模式和strategy模式是非常相似的,但既然他们分成两种不同的模式,就有一定的区别,用一句话来概括就是: 策略用来处理算法方式变化,而状态则是处理状态变化。 具体可以参考:http://blog.youkuaiyun.com/lwzcjd/archive/2009/05/19/4201828.aspx   下...

程序员的艺术人生! 1098

策略模式Strategy

策略模式(Strategy);它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响算法的客户;由于实例化不同的策略,所以最终在调用Context.ConcreteStrategy();Context,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用。ConcreteStrategy,封装了具体的算法行为,继承于Strategy。Strategy类,定义所有支持算法的公共接口。

weixin_44036248的博客 161
上一篇: Enterprise Architect之UML实践
下一篇: 状态(state)模式
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值