策略(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语言的话也可以用函数指针实现)

STM32 AFIO时钟开启时机与复用功能解析 在嵌入式系统开发中,GPIO复用是微控制器外设配置的核心技术之一。通过复用功能,单个物理引脚可以动态切换不同功能模式,如USART通信或普通IO。其实现原理依赖于芯片内部的时钟树架构和寄存器配置机制。AFIO(Alternate Function I/O)模块作为STM32的特色设计,专门处理引脚重映射、外部中断配置等高级功能。正确理解复用功能与AFIO时钟的关系,能显著提升嵌入式开发效率,避免资源浪费。本文以STM32为例,结合引脚重映射和USART配置等典型场景,详解AFIO时钟的实际应用规范与优化实践 阅读详情

相关推荐

YOLOv11n-seg 实战指南:从训练到模型部署的完整流程

本文提供了YOLOv11n-seg实例分割模型从环境准备、数据标注到模型训练、验证及最终部署的完整实战指南。详细讲解了如何准备多边形掩码数据、配置关键训练参数、解读分割核心评估指标,并重点介绍了将模型导出为ONNX等格式进行部署的流程与优化技巧,帮助开发者高效完成从开发到生产的全链路实践。

weixin_29062255的博客 554

设计模式之策略模式

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

weixin_64366370的博客 1078

STM32的bootloader程序(通过串口更新STM32应用程序)

STM32的bootloader程序(通过串口更新STM32应用程序),对bootloader进行浅浅的学习

星羽空间 1万+

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

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

miaoyl的博客 5044

Unity游戏Mono注入实战:从反编译到功能扩展

本文详细介绍了Unity游戏Mono注入的完整实战流程,从使用dnSpy反编译游戏核心逻辑,到编写自定义C#功能DLL,再到利用SharpMonoInjector进行动态注入。文章深入讲解了如何通过Harmony库拦截修改游戏方法,并介绍了使用MelonLoader框架和UnityExplorer进行高级模组开发与调试,最终通过一个游戏对象透视(ESP)案例演示了功能扩展的实现。

weixin_29018335的博客 458

TS808效果器制作教程

TS808效果器制作教程 可以在立创商城购买到大部分的电阻电容和IC,音频接口,踩钉,电位器和电源接口可以去某宝看看都买得到的。链接https//pan.baidu.com/s/1QId1eIE3fJ2u5NLBSISvGA。安装过程过于繁琐,把所有元器件按照图纸焊接完成就可以调试了,祝你们成功!这是TS808经典效果器制作过程的记录。IC是JRC4558。...

qq_18948149的博客 3426

策略模式(Strategy)

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

zhimokf的专栏 1253

将AAL图谱对应到Yeo7大网络中【原理,代码分析】

本文介绍了将AAL2图谱映射到Yeo7大功能网络的方法。通过整合皮层(Yeo2011)、小脑(Buckner2011)和纹状体(Choi2012)三个区域的功能网络图谱,采用投票机制确定每个AAL区域的网络归属。具体步骤包括:1)统计每个AAL区域体素在各网络图谱中的分布;2)选择体素数量最多的网络作为该区域的最终标签。该方法实现了从解剖结构到功能网络的映射,可获得120个AAL区域对应的7大功能网络标签。

yes666666的博客 2206

策略模式

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

Filwaod 1973

SoIC、CoWoS、InFO一次讲透:从2D/2.5D/3D看懂先进封装

先进封装是后摩尔时代提升芯片性能的关键路径,但面对SoIC、CoWoS、InFO这些名词,很多人容易混淆。理解它们,需从最基本的2D、2.5D、3D封装概念入手:2D是传统平房,2.5D通过硅中介层实现高密度互连,3D则让芯片直接堆叠。CoWoS作为2.5D中介层封装,已成为AI芯片与HBM高带宽存储集成的行业标准;SoIC通过铜-铜混合键合实现真正的3D堆叠,为逻辑与缓存提供极致带宽;InFO以扇出型封装兼顾成本与集成度,广泛用于移动SoC。在系统级封装(SiP)和CPO共封装光学等前沿趋势中,这些技术往

weixin_42388898的博客 310

linux内核学习(一)---内核社区介绍及补丁提交

本系列开始会对linux内核进行系统性的学习,以源码与内核社区为基础,了解前沿的内核机制,同时也深度了解linux内核中的一些经典机制 本章会先对linux内核社区进行简单的介绍,包括源码下载、内核社区的修改提交

文艺小少年的博客 536

23种模式——策略模式

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

qq_51165184的博客 3万+

AWS SQS跨账户访问失败排查指南

在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接收消息”的问题。通过本文的逐步排查指南,您不仅可以解决当前问题,还能深入理解AWS跨账户访问的权限模型。接收方账户的用户或角色必须同时附加IAM策略,显式授权操作目标队列。尽管策略看似允许接收方操作,实际测试中却返回空消息或。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 458

Strategy (策略)模式

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

矢落叶の博客 924

数学建模模型总结

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

m0_49499183的博客 2238

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

设计模式之Strategy(策略)

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

设计模式 Design patterns 922

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值