Strategy 策略模式

策略模式(Strategy Pattern) ✅ 将每种行为或算法封装成独立的策略类,客户端通过选择不同的策略来改变行为。✅ 适用于需要在运行时动态改变算法或行为的场景。如果你有任何问题或需要进一步的解释,随时告诉我! 阅读详情

模式定义

 

Strategy模式定义了一系列不同的算法封装成不同的类,使客户端通过环境类来调用这些不同的算法类,实现统一对象的不同行为。

使用范围

 

  • 同一个对象在不同的情形下具有不同的行为

举例说明

 

假设现有两个数字,他们在不同的情况下需要做不同的数学运算,加减乘除,具体由客户端来决定何时实现这些不同行为。我们首先定义一个Strategy接口,提供了execute的方法。同时这个execute具体内部的行为由Strategy的实现类来决定是加还是减,乘还是除。

public interface Strategy {
	public int execute(int arg1, int arg2);
}

--------
public class StrategyAdd implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 + arg2;
	}
}

--------
public class StrategyMultiply implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 * arg2;
	}
}

--------
public class StrategySubstract implements Strategy{
	public int execute(int arg1, int arg2) {
		return arg1 - arg2;
	}
}

至此,客户端完全可以通过调用这些不同的类来实现具体的数学运算。但是Strategy的模式提供了一个环境类,使客户在调用这些不同的类时能使用一致的接口。客户无需知道这些算法类具体如何运算,它只需在环境类中注入它需要的类对象即可。

public class StrategyContext {

	private Strategy strategy;
	public StrategyContext(Strategy s){
		strategy = s;
	}
	
	public int executeStrategy(int arg1, int arg2){
		return strategy.execute(arg1, arg2);
	}
}

客户类通过创建环境类对象,注入算法类。

public class StrategyClient {
	public static void main(String args[]){
		int r1, r2, r3;
		
		StrategyContext sm = new StrategyContext(new StrategyAdd());
		r1 = sm.executeStrategy(2, 4);
		sm = new StrategyContext(new StrategySubstract());
		r2 = sm.executeStrategy(2, 4);
		sm = new StrategyContext(new StrategyMultiply());
		r3 = sm.executeStrategy(2, 4);
		
		System.out.println("r1=" + r1);
		System.out.println("r2=" + r2);
		System.out.println("r3=" + r3);
	}

}

运算结果:

r1=6
r2=-2
r3=8

下载示例

 

3.4 策略模式(Strategy Pattern) -《SSM深入解析与项目实战》 文章目录3.4 策略模式(Strategy Pattern)3.4.1 策略模式的定义3.4.2 策略模式的作用3.4.3 模式结构3.4.4 场景实例抽象策略角色具体的策略角色上下文角色测试类演示结果总结 3.4 策略模式(Strategy Pattern) 遇到一个问题,可能有各种各样的不同解决方式,在这里,可以把方式称为策略。在实际中,根据不同的场景或者条件来选择不同的策略解决问题。也比如说,我们在实际开发中,可能我们实现某个功能有几种不同的方式,在这个时候,我们就可以使用策略模式来进行选 阅读详情

相关推荐

策略模式(Strategy Pattern)详解

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互相替换。策略模式让算法独立于使用它的客户端而变化,使得客户端可以在不修改代码的情况下,通过组合不同的策略对象来改变应用的行为。策略模式的核心思想是:“定义一系列算法,封装每一个算法,并使它们可以互换。”在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的上下文对象。策略对象改变上下文对象的执行算法。在以下情况下,策略模式特别有用:当需要在运行时选择不同的算法时:策略模式允许客户端在运行时选择不同的算法实

yk_dflkg的博客 1566

策略模式 (Strategy Pattern)

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

懵萌长颈鹿的博客 1368

策略模式 C++实现

策略模式的 C++ 代码实现, ide :XCode

策略模式 Strategy Pattern

策略模式「strategy pattern 」(也称为policy pattern)是一种行为软件设计模式「behavioral」,可以在运行时选择算法。代码不是直接实现单个算法,而是接收运行时指令,指示使用一系列算法「a family of algorithms」中的哪一个。在上面的UML类图中,Context类不直接实现算法。相反,Context引用 用于执行算法的Strategy接口(Strategy.algorithm()),这使得Context独立于算法的实现方式。

DachuiLi的博客 1359

Unity新手必看:5分钟搞定TextMeshPro中文乱码,告别小方块(附7000+常用字库)

本文详细介绍了Unity中TextMeshPro中文乱码问题的解决方案,包括快速生成中文字体的步骤和优化技巧。通过使用支持中文的.ttf字体文件和自定义字符集,开发者可以在5分钟内解决TMP显示小方块的问题,提升游戏或应用的文本显示效果。

weixin_33095355的博客 363

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

策略模式-Strategy Pattern

在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 在策略模式中,我们可以定义...

心猿意碼 3893

大开眼界的十大开源人工智能项目

这是一个强大的开源工具,能让你在不同框架之间自由切换,无需重写代码。它是一个开源工具,能用简单的SQL语言同时处理数据和AI模型,让一切变得有序而高效。Rasa是我开发智能聊天机器人时的首选,它让你轻松掌控机器人对话的每个细节。我经常用它快速验证模型在不同框架下的表现,省去了大量烦躁的调试过程。最近发现的Vapi是一个以API方式提供的语音AI工具,开发者友好程度超乎想象。KNIME是一个以拖拽方式构建数据分析流程的开源工具,仿佛是数据界的乐高积木。它像个忠诚的守门员,确保你的模型始终健康运行。

wjianwei666的专栏 1107

设计模式-19策略模式Strategy Pattern

策略模式是一种行为设计模式,通过定义一系列可互换的算法并将其封装,使算法能独立于使用它的客户端而变化。该模式适用于需要动态切换不同算法或行为的场景,可避免大量条件判断语句。其核心结构包括策略接口、具体策略类和使用策略的上下文类。实现时,先定义策略接口,然后创建具体策略类实现接口方法,最后通过上下文类动态设置和切换策略。示例展示了支付系统中的多种支付策略(信用卡、PayPal、银行转账)的灵活切换,体现了策略模式的可扩展性和解耦优势。 (149字)

d3y1`5 81_09 1089

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 2005

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发

兴趣使然的创作者 1万+

C#设计模式之策略模式(Strategy Pattern)

概述:        策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。 这个模式涉及到三个角色: 环境(Context)角色:持有一个St

donnie88888888的专栏 4065

M1安装homebrew报错LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决方法

在mac系统中,使用homebrew可以很方便的管理包。但按照官网的说明执行命令时总是报错原因是这个资源访问有问题,那么我们可以直接使用国内的镜像。给大家推荐一个中国科学技术大学的镜像站点,里面有各种资源https言归正传,开始踩坑。......

qq_42427085的博客 1456

设计模式之策略模式(Strategy Pattern)

策略模式定义 策略模式是一种比较简单的设计模式,也叫做政策模式,策略模式的核心就是面向对象的继承和多态机制。Define a family of algorithms, encapsulate each one, and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 策略模式通用类图 策略模式的三个角色: Context封...

程铭程铭你快成名的博客 4914

储能EMS工作原理深度剖析:功率分配与充放电策略的底层逻辑

储能EMS的功率分配与充放电策略,是其智能化的集中体现。功率分配更像一个“执行指挥官”,关注如何将总任务高效、公平、安全地分解到每个士兵(PCS/电池簇);而充放电策略则像“总参谋长”,基于战场情报(市场、电网、自身状态)制定最优的作战计划。AI强化学习策略:让EMS通过与复杂环境不断交互,自主学习最优策略,适应不确定性。数字孪生与仿真:在虚拟空间中提前验证策略,评估风险,实现预防性控制。跨站协同优化:多个储能站的EMS通过云平台协同,参与区域电网甚至跨省市场的联合优化调度。

小帽子的博客 377

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

宁波阿成的博客 199

【设计模式】策略模式(Strategy Pattern)详解

策略模式(Strategy Pattern)是一种行为型设计模式,

qq_59344127的博客 1839

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

策略模式Strategy Pattern

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; ms...

weixin_34104341的博客 1137

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

策略模式【Strategy Pattern】

刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的。先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用 JAVA 程序怎么表现这个呢?我们先看类

admin1973的专栏 467

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

23种设计模式——策略模式 (Strategy Pattern)​详解

本文介绍了23种经典设计模式之——策略模式 (Strategy Pattern)​的说明及使用

Meteors.的博客 837

策略模式(Strategy Pattern)

策略模式(Strategy Pattern) 用Go语言学习策略模式

非晓为骁的博客 1161
上一篇: State 模式
下一篇: Flyweight模式
zigzagsoft
博客等级 码龄19年 34粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值