设计模式-策略模式-使用

embedded/2024/10/21 14:30:28/

设计模式-策略模式-CSDN博客

  1. 系统中有很多类,它们之间的区别仅在于它们的行为。策略模式可以定义一系列的算法,并将它们一个个封装起来,使它们可以相互替换。这样,算法就可以独立于使用它的客户而变化。
  2. 需要使用算法的不同变体。当算法有多种实现方式,并且需要根据不同的情况选择使用不同的算法时,可以使用策略模式
  3. 算法使用客户不应该知道的数据。策略模式可以避免暴露复杂的、与算法相关的数据结构,保证算法的安全性和封装性。
  4. 一个类定义了多种行为,并且这些行为在类的操作中以多个条件语句的形式出现。使用策略模式可以避免使用大量的if-else语句,提高代码的可读性和可维护性。

具体来说,策略模式在以下场景中得到了广泛的应用:

  1. 计费系统:对于不同用户类型和消费金额,系统可以采用不同的计费方式。通过策略模式,可以定义不同的计费策略,并在运行时根据需要选择合适的策略。
  2. 游戏开发中的角色技能系统:不同角色拥有不同的技能,游戏可以根据角色选择相应的技能进行攻击或防御。策略模式可以定义不同的技能策略,并在游戏中根据需要动态切换。
  3. 商城促销活动:商城可以根据不同的促销活动采取不同的优惠方式,如打折、满减等。通过策略模式,可以定义不同的促销策略,并在促销活动中动态应用。

与简单工厂模式的区别主要体现在以下几个方面:

  1. 核心思想不同:简单工厂模式的核心是创建对象,它将所有对象的创建逻辑集中在一个工厂类中。而策略模式的核心是定义一系列可互相替换的算法,它关注的是算法的使用和切换。
  2. 关注点不同:简单工厂模式关注的是对象的创建过程,它将对象的创建与使用分离开来,简化了对象的创建过程。而策略模式关注的是如何使用这些对象,特别是如何根据不同的条件选择合适的算法或策略。
  3. 灵活性不同:简单工厂模式在添加新的对象类型时需要修改工厂类的方法,这违反了设计模式中的开闭原则(OCP)。而策略模式则通过定义接口和策略类来实现算法的多样性,可以在不修改已有代码的情况下添加新的策略。
  4. 代码结构不同:简单工厂模式通常包含一个工厂类和一个或多个产品类,工厂类负责创建产品类的实例。而策略模式则包含策略接口、具体策略类、上下文环境和客户端等部分,策略接口定义了一系列算法的公共接口,具体策略类实现了这些接口中的算法,上下文环境负责根据条件选择合适的策略,并将其应用于客户端。

http://www.ppmy.cn/embedded/43959.html

相关文章

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

docker 安装RabbitMQ-web版本

直接拉去web版本 docker pull rabbitmq:management启动命令 设置用户名 admin 密码123456 docker run -dit --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASS123456 rabbitmq:management访问地址 http://127.0.0.1:…

技术架构设计指南:从需求到实现

技术架构是软件系统的骨架,它决定了系统的性能、可靠性、扩展性等关键特性。本文将介绍技术架构设计的一般步骤和方法。 第一步:需求分析 在设计技术架构之前,首先要对系统需求进行全面深入的分析。这包括功能需求、非功能需求(如…

代码随想录二刷 Day05 | 242.有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和,454.四数相加II,383. 赎金信

题目与题解 参考资料:哈希表理论基础 Tips: 一般哈希表都是用来快速判断一个元素是否出现集合里哈希表生成原理:先通过哈希函数将变量映射为hashcode,如果二者hashcode相同,再通过哈希碰撞方法(拉链法&…

linux的磁盘分区与管理

磁盘分区与管理 识别磁盘 一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤) •识别硬盘 > 分区规划 > 格式化 > 挂载使用 Unix/Linux的基本哲学理念:一切皆文件 /dev:存放设备(键盘、鼠标、光驱、硬盘……

大数据量上传FTP

背景 笔者有一个需求是把将近一亿条数据上传到FTP服务器中,这些数据目前是存储在mysql中,是通过关联几张表查询出来的,查询出来的数据结果集一共是6个字段。要求传输的时候拆分成一个个小文件,每个文件大小不能超过500M。我的测试…

Gitee的原理及应用详解(一)

本系列文章简介: Gitee是一款开源的代码托管平台,是国内最大的代码托管平台之一。它基于Git版本控制系统,提供了代码托管、项目管理、协作开发、代码审查等功能,方便团队协作和项目管理。Gitee的出现,在国内的开发者社…

【文末附gpt升级秘笈】黄仁勋的领导能力和战略眼光对英伟达成功的重要性是什么

黄仁勋的领导能力和战略眼光对英伟达的成功具有至关重要的影响,这一点可以从以下几个方面来清晰归纳: 战略布局与洞察力: 黄仁勋早在多年前就意识到GPU在人工智能领域的重要性,并投入大量资源进行研发。这一前瞻性布局使得英伟达…