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

Penpot自托管全攻略:5分钟搞定私有化部署(附Docker配置详解) 本文详细介绍了Penpot开源原型设计工具的私有化部署全流程,从Docker基础配置到企业级优化方案。通过分步指南和实战技巧,帮助设计团队快速搭建安全高效的自托管环境,实现数据自主可控。内容涵盖LDAP集成、性能监控、备份策略等关键企业需求,是Penpot私有化部署的完整参考手册。 阅读详情

概念

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

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

要素

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

如何解决:将这些算法封装成一个一个的类,任意地替换。

关键代码:实现同一个接口。

应用实例旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。

优点:

1、算法可以自由切换。

2、避免使用多重条件判断。

3、扩展性良好。

缺点:

 1、策略类会增多。

2、所有策略类都需要对外暴露。

使用场景: 

1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2、一个系统需要动态地在几种算法中选择一种。

3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。


实现

我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。

StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。


步骤 1

创建一个接口。

Strategy.java

public interface Strategy {
   public int doOperation(int num1, int num2);
}

步骤 2

创建实现接口的实体类。

OperationAdd.java

public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
OperationSubstract.java
public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}

OperationMultiply.java

public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

步骤 3

创建 Context 类。

Context.java

public class Context {
   private Strategy strategy;

   public Context(Strategy strategy){
      this.strategy = strategy;
   }

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

步骤 4

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

StrategyPatternDemo.java

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());		
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationSubstract());		
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationMultiply());		
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

Android中的应用

listView.setAdapter(),里面的Adapter,一般都是自定义的Adapter,继承自BaseAdapter,这就是典型的策略模式,当ListView的Item呈现不同形式,在getView方法中,就得采用不同的实现。


Windows Server 2012评估版过期自动关机问题:两种高效解决方案详解 本文针对Windows Server 2012评估版过期导致的自动关机问题,提供了两种高效解决方案。一是通过slmgr.vbs命令重置授权,临时延长评估期;二是使用DISM工具将评估版转换为正式版,一劳永逸。文章详细解析了两种方法的操作步骤、注意事项及适用场景,帮助用户快速恢复服务器稳定运行。 阅读详情

相关推荐

LabVIEW内存泄漏诊断与优化:从报错到高效运行

本文深入探讨LabVIEW内存泄漏的诊断与优化方法,从理解内存泄漏本质到使用专业工具链进行问题定位,再到高频场景的解决方案和高级优化策略。通过实战案例展示如何解决工业数据采集系统中的内存不足问题,帮助开发者提升LabVIEW应用的稳定性和效率。

moon9的博客 197

Java设计模式 Design Pattern:策略模式 Strategy Pattern

意图 Define a family of algorithms, encapsulate each one, and make them interchangeable. 定义一组算法,封装每一个算法,并使他们可以互换 Strategy lets the algorithm vary independently from clients that use it. 策略使得算法可以

OYJJ的专栏 1719

CentOS 7下Multipath多路径存储的实战配置与性能优化

本文详细介绍了在CentOS 7系统中配置与优化Multipath多路径存储的完整实战流程。从安装部署、核心配置文件解读,到性能调优与生产环境避坑指南,全面解析如何利用Device Mapper Multipath构建高可用、负载均衡的存储链路,提升存储系统可靠性与I/O性能。

weixin_29278805的博客 320

设计模式:策略模式(Strategy Design Pattern)

个人觉得学习设计模式的话,还是应该注重各种设计模式的应用场景,23种设计模式真的挺多的,要靠死记硬背的话还是没那么容易记住。所以我建议可以在自己实际编码时,套用上各种设计模式。 策略模式是一个很好的例子,如果需要用到大量的if~else判断的话,就可以用到策略模式 我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复制链接等等。如果让你来实现这个功能,你会如何实现呢? 用了

weixin_45251189的博客 3712

车载智能终端的设计

本文研究的主要内容是车载智能终端的设计,在学习和借鉴国内外在车载电子领域已有的成熟经验的基础上,利用32位嵌入式处理器S344B0X01和μC/OS-Ⅱ实时操作系统技术,针对汽车行驶记录仪、GPS/GPRS的已有设计的不足提出了新的解决方案,并对方案的可行性进行了分析和论证。

weixin_44553616的博客 1415

保姆级教程:用Docker Compose在Linux上一键部署Milvus 2.5.8(附配置文件详解)

本文提供了一份详细的Milvus 2.5.8安装指南,通过Docker Compose在Linux系统上一键部署这款高性能向量数据库。教程涵盖环境准备、配置文件解析、服务启动验证及常见问题解决,帮助开发者快速搭建AI应用所需的基础设施。

weixin_28829629的博客 269

深入浅出设计模式(Design Pattern)----策略模式(Strategy Pattern)

深入浅出设计模式(Design Pattern)----策略模式(Strategy Pattern) 这是设计模式开篇,我觉得策略模式真的对我来说是一种醍醐灌顶的感觉.让我感觉:哇,真的诶,用这种设计模式真的可以方便很多,代码的层次结构更清晰.下面就让我们开始吧.策略模式:策略模式定义了算法族,分别将其封装起来,让他们之间可以相互转换,这个模式使得算法的变化独立于使用算法的客体. 但是严谨的定义通常是难以理解的,接下来我们通过一个故事,来深刻理解这种设计模式的使用场景和强大之处吧(以下例子来自Head

阿伟のBlog 733

[Dify] 如何构建一个带评分功能的 Dify AI 教练系统

本文介绍如何利用Dify开源平台构建具备自动评分功能的AI教练系统。系统通过Prompt设计AI教练角色,使用OpenAPI定义评分工具接口,结合工作流编排实现提问、回答收集、评分和反馈的全流程。文章详细讲解了从AI教练身份设定、多维度评分标准设计到前端可视化展示的实现方法,并提供了可扩展建议,适用于语言训练、面试模拟等多种场景。该系统展示了Dify平台在构建智能化评估应用方面的优势,实现零代码开发专业AI教练解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 333

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

模板模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.翻译成中文就是:定义一系列算法(策略),封装每一个算法(策略),并使它们可以互换。使算法(策略)可以独立于使用它的客

xjj1314的专栏 428

基于SSD2828和STM32的MIPI显示屏驱动系统设计与实现

在硬件层面,需要将STM32、SSD2828和MIPI显示屏连接起来。STM32与SSD2828的连接:通过SPI接口连接STM32和SSD2828,用于配置和控制SSD2828。SSD2828与MIPI显示屏的连接:通过MIPI DSI接口连接SSD2828和MIPI显示屏,用于传输显示数据。

qq_38334677的博客 7143

AgentScope实战训练营-Java开发HITL人机协作AI应用完整指南

本文手把手带你从零搭建一个基于 Spring Boot WebFlux + AgentScope + 通义千问的人机协作(HITL)AI 聊天应用。项目涵盖流式对话、工具调用、高危操作确认、对话中断、动态 MCP 工具接入、中英文双语界面等完整功能。文章从环境准备、pom.xml 配置、DTO 数据模型、Hook 机制、AgentService 核心服务、ChatController 接口到前端 HTML/CSS/JS 实现,逐一讲解每行代码的设计意图,并附带 REST API 接口说明、测试场景、常见问题

program哲学 713

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

本篇文章将23种设计模式中的策略模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 1万+

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

[图书小结] 深入浅出设计模式:策略模式 The Strategy Pattern

[图书小结] 深入浅出设计模式:策略模式 The Strategy Pattern问题背景继承 (Inheritance) 的局限性 -- The Limitations of Inheritance改用接口 (Interface) 如何 -- How about an Interface?思考分析Design Principle 设计原则1. Encapsulate what varies 抽取出并封装会发生变化的那些2. Program to an interface, not an implement

dev_的博客 192

计算机控制技术及应用

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

VC中sqlite的使用

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

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

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互换使用,算法的变化不会影响使用算法的用户。策略模式的优点包括算法的封装和切换的灵活性,以及算法可独立于使用它的客户端变化。:如果算法的实现非常复杂,或者算法可能会随着时间而变化,策略模式可以帮助管理这种复杂性,使得算法的变化不会影响到使用算法的代码。:在需要根据不同条件动态切换算法的场景中,策略模式可以提供灵活的算法切换机制,例如,根据输入数据的特性选择不同的算法。

wesigj的博客 1456

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

d3y1`5 81_09 1088

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

Meteors.的博客 837

C++设计模式——策略模式(Strategy Pattern)

C++设计模式——策略模式(Strategy Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——策略模式(Strategy Pattern)目录定义实现示例传统的策略模式实现使用函数指针实现策略模式工厂模式和策略模式对比总结参考资料 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式是指定

leonardohaig的博客 4773

设计模式中的策略模式(Strategy Pattern)

在软件开发中,经常遇到多个算法或行为可以互换的情况,例如不同的支付方式、排序算法、日志记录方式等。如果使用 `if-else` 或 `switch-case` 选择不同的策略,代码将变得复杂且难以维护。策略模式(Strategy Pattern) 提供了一种定义一组算法,并在运行时选择合适的算法的方法,从而使代码更加灵活、可扩展、符合开闭原则(OCP)。本文将详细介绍策略模式的概念、应用场景,并通过 Python 代码示例展示其实现方式。

1782

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

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

donnie88888888的专栏 4065

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

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

qq_59344127的博客 1839

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

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

weixin_45226668的博客 1506

Design Pattern-Strategy Pattern 设计模式之策略模式

Design Pattern-Strategy Pattern 设计模式之策略模式

bmzyDream_007的专栏 1596

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

策略模式是一种行为型设计模式,它定义了一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这样,算法的变化不会影响到使用算法的客户。

TechNomad的博客 1262

设计模式十:策略模式(Strategy Pattern)

0、相关文章:=======(阅读量6376)1、详解====1.1、概念定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。本模式使得算法可独立于使用它的客户而变化。1.2、使用场景一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句。1.3、UML结构图分析可以看到,策略模式中主要有以下几个角色:Strategy 接口,用于定义算法的固定套路。

2501_90425746的博客 1821

设计模式之策略模式 | Strategy Pattern

设计模式之策略模式 | Strategy Pattern从名字上我们很难理解这个设计模式适用于什么情况下,什么情况下使用这个设计模式更合理,他有哪些优点,所以我们在最后再对策略模式的概念所出解释首先,让我们从一个例子的需求入手,一步一步的来了解如何用策略模式解决开发中遇到的问题模拟鸭子游戏:要求游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫。现在我们使用标准的OO原则,设计一个鸭子超类,并让各种鸭子

郭勇的博客 1501
上一篇: 如何做好移动产品的导航设计
下一篇: 模板方法(Template Pattern)
hunter800421
博客等级 码龄22年 60粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值