设计模式详解---策略模式

2023-12-17

1. 策略模式简介

策略模式(Strategy Pattern)是一种行为型设计模式,用于在运行时根据不同的情境选择不同的算法或策略。该模式将算法封装成独立的类,使得它们可以相互替换,而且可以独立于客户端使用它们的方式。

1.1. 主要角色
  • 上下文(Context):负责与客户端进行交互,通常持有一个策略对象的引用,并将客户端的请求委派给策略对象执行。
  • 策略(Strategy):定义了一个公共接口,用于封装不同的算法或策略。
  • 具体策略(Concrete Strategies):实现了策略接口,提供具体的算法或策略逻辑。
1.2. 工作原理
  1. 定义一个策略接口,其中包含一个或多个方法用于执行具体的算法或策略。
  2. 创建具体的策略类,分别实现策略接口,提供不同的算法或策略实现。
  3. 在上下文类中维护一个策略对象的引用,客户端通过上下文类与策略进行交互。
  4. 客户端根据需求选择特定的策略对象,并将其传递给上下文类。
  5. 上下文类在接收到客户端请求后,将请求委派给当前持有的策略对象执行。

2. 策略模式代码设计


/**
 * @Author: stukk
 * @Description: 定义策略接口
 * @DateTime: 2023-12-16 21:46
 **/
public interface Strategy {
    void execute();
}


/**
 * @Author: stukk
 * @Description: 执行策略一的代码
 * @DateTime: 2023-12-16 21:49
 **/
public class ConcreteStrategyA implements Strategy {

    @Override
    public void execute() {
        System.out.println("执行策略一的代码");
    }
}


/**
 * @Author: stukk
 * @Description: 执行策略二的代码
 * @DateTime: 2023-12-16 21:49
 **/
public class ConcreteStrategyB implements Strategy {

    @Override
    public void execute() {
        System.out.println("执行策略二的代码");
    }
}



/**
 * @Author: stukk
 * @Description: 客户端代码
 * @DateTime: 2023-12-16 21:51
 **/
public class StrategyDemo {

    public static void main(String[] args) {
        Strategy strategyA = new ConcreteStrategyA();
        Strategy strategyB = new ConcreteStrategyB();

//        执行策略1
        Context context = new Context(strategyA);
        context.executeStrategy();

//        执行策略2
        context.setStrategy(strategyB);
        context.executeStrategy();

    }

}



3.策略模式应用场景

  1. 计算器应用:策略模式可以用于计算器应用,其中不同的操作(如加法、减法、乘法、除法)可以表示为不同的策略。通过选择相应的策略,可以根据用户的需求执行不同的计算操作。

  2. 支付系统:在支付系统中,可以使用策略模式来处理不同的支付方式。每个支付方式(如信用卡、支付宝、微信支付)可以被实现为一个具体的策略,并通过选择相应的策略来完成支付操作。

  3. 游戏开发:策略模式在游戏开发中也被广泛使用。例如,不同的敌人行为(如进攻、防守、逃跑)可以通过策略模式来实现。每个行为可以作为一个策略,游戏角色根据当前情况选择相应的策略来执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设计模式详解---策略模式 的相关文章

  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • 小谈设计模式(1)—总序

    小谈设计模式 1 总序 专栏地址 开始操作 设计模式总论 设计模式是什么 组成要素 模式名称 问题描述 解决方案 效果描述 设计模式有什么作用 提供可重用的解决方案 提高代码的可读性和可维护性 促进代码的可扩展性 提高代码的灵活性和可重用性
  • 编译器报:lambda表达式中使用的变量应为final或有效final 解决方案

    目录 问题描述 原因分析 解决方案 1 声明为final 2 使用有效final 4 使用数组或集合 错误问题的最终解决示例 总结 问题描述 今天在写代码的过程中想要在stream map 方法内部对外部变量进行赋值 结果发现编译器报错 提
  • java需会(转载)

    一 基础篇 1 1 Java基础 面向对象的特征 继承 封装和多态 final finally finalize 的区别 Exception Error 运行时异常与一般异常有何异同 请写出5种常见到的runtime exception i
  • 行为型模式-状态模式

    package per mjn pattern state after 环境角色类 public class Context 定义对应状态对象的常量 public final static OpeningState OPENING STAT
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • 设计模式一之简单工厂模式

    生活示例 刻板印刷 gt 活字印刷举例 喝酒唱歌 人生真爽 gt 对酒当歌 人生几何 可维护 需要修改 则只需要改需要改的字即可 可复用 字体可在后来的印刷复用 可扩展 需要加字 只需要加入相应的刻字即可 灵活性好 字的排列可能竖排或横排
  • 设计模式-2--工厂模式(Factory Pattern)

    一 什么是工厂模式 工厂模式 Factory Pattern 是一种创建型设计模式 它提供了一种创建对象的接口 但是将对象的实例化过程推迟到子类中 工厂模式允许通过调用一个共同的接口方法来创建不同类型的对象 而无需暴露对象的实例化逻辑 工厂
  • 设计模式--提供者模式provider

    设计模式 C 提供者模式 Provider Pattern 介绍 为一个API进行定义和实现的分离 示例 有一个Message实体类 对它的操作有Insert 和Get 方法 持久化数据在SqlServer数据库中或Xml文件里 根据配置文
  • Spring Boot入门&整合常用框架整理丨深度好文

    一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 Spring是Java企业版 Java Enterprise Edition JEE 也称J2EE 的轻量级代替品 无需开发重量级的Ent
  • java-IO流(5)-IO流中的设计模式(装饰器模式和适配器模式)的介绍

    目录 1装饰器模式 1 1定义 1 2代码实现 1 3装饰器特点 1 4装饰器在IO流中的使用 2配适器模式 2 1Adapter适配器 2 2代码实例 2 3适配器特点 2 4适配器优缺点 2 5适配器在IO中的使用 3装饰器与适配器异同
  • 组合型模式

    概述 对于这个图片肯定会非常熟悉 上图我们可以看做是一个文件系统 对于这样的结构我们称之为树形结构 在树形结构中可以通过调用某个方法来遍历整个树 当我们找到某个叶子节点后 就可以对叶子节点进行相关的操作 可以将这颗树理解成一个大的容器 容器
  • JavaScript设计模式-02-单例模式

    Javascript 设计模式 02 单例模式 简介 单例就是保证一个类只有一个实例 实现的方法一般是先判断实例是否存在 如果存在直接返回 如果不存在就创建了再返回 确保了一个类只有一个实例对象 在JavaScript里 单例作为一个命名空
  • 设计模式(不懂)

    面试中经常问到设计模式 我才对这个东西了解了一下 才发现他是没有开发的新大陆 是oo设计的更高级别 能把设计模式搞懂 那oo你就搞的差不多了 随便看了还是很有意思的 虽然不怎么懂 百科名片 相关书籍 设计模式 Design pattern
  • 设计模式详解---策略模式

    1 策略模式简介 策略模式 Strategy Pattern 是一种行为型设计模式 用于在运行时根据不同的情境选择不同的算法或策略 该模式将算法封装成独立的类 使得它们可以相互替换 而且可以独立于客户端使用它们的方式 1 1 主要角色 上下
  • 在AI技术的无情侵袭下,学学Java的23种设计模式还是非常有必要的

    目前国内80 程序员的主要工作是调用组合api实现各种业务需求 在顶层架构师设定好的框架下 做着重复且无聊的编码工作 如果未来ai被广泛应用 那么被替代的风险是很高的 比较扎心的是 其实目前用ai生成片段代码已经是各个公司比较普遍的做法了
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • C++设计模式 --1.工厂模式和单例模式

    文章目录 1 工厂模式 简单工厂模式 工厂方法模式 抽象工厂模式 2 单例模式 懒汉式 饿汉式 1 工厂模式 简单工厂模式

随机推荐

  • 每天花2小时复习Java面试指南,高级架构视频,我进了阿里定级P7

    Java进阶架构师必备 基础 容器 并发 JVM Java8 计算机网络 计算机操作系统 Linux 数据结构 算法 mysql 优化思路 系统设计 分布式 线上问题调优 虚拟机 tomcat 面试指南 工具 添加图片注释 不超过 140
  • NAT场景案例分析

    目录 问题现象一 NAT Server故障排错思路 问题现象二 NAT Server问题 问题现象三 NAT Server问题 问题现象四 LAN LAN映射 问题现象一 NAT Server故障排错思路 NAT Server故障排查思路
  • GA-LSTM分类预测 | Matlab遗传算法(GA)优化长短期记忆网络的数据分类预测

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 冗余备份组网——HSRP和GLBP协议

    目录 HSRP 思科私有协议 HSRP基本概念 HSRP工作过程 HSRP的状态 HSRP的可靠性 HSRP相关配置 GLBP协议 HSRP 思科私有协议 HSRP基本概念 HSRP Host Standby Router Protocol
  • 每日一练2023.12.16——吃火锅【PTA】

    题目链接 L1 070 吃火锅 题目要求 以上图片来自微信朋友圈 这种天气你有什么破事打电话给我基本没用 但是如果你说 吃火锅 那就厉害了 我们的故事就开始了 本题要求你实现一个程序 自动检查你朋友给你发来的信息里有没有 chi1 huo3
  • 基于卷积神经网络结合注意力机制的长短记忆网络CNN-LSTM-Adaboost实现风电功率回归预测附matlab实现

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 目前最火的大模型训练框架 DeepSpeed 详解来了

    目前 大模型的发展已经非常火热 关于大模型的训练 微调也是各个公司重点关注方向 但是大模型训练的痛点是模型参数过大 动辄上百亿 如果单靠单个GPU来完成训练基本不可能 所以需要多卡或者分布式训练来完成这项工作 一 分布式训练 1 1 目前主
  • SpringMVC上传下载文件解读

    知识点 文件上传 File Upload 创建一个控制器方法 使用 MultipartFile 参数来接收上传的文件 在 Spring 配置文件中配置一个 MultipartResolver 常用的实现类是 CommonsMultipart
  • 【计算机毕设文章】模拟考试小程序

    摘 要 随着我国经济迅速发展 人们对手机的需求越来越大 各种手机软件也都在被广泛应用 但是对于手机进行数据信息管理 对于手机的各种软件也是备受用户的喜爱 模拟考试被用户普遍使用 为方便用户能够可以随时进行模拟考试的数据信息管理 特开发了基于
  • 【计算机毕设文章】微信阅读小程序的设计与实现

    毕 业 设 计 论 文 题目 微信阅读小程序的设计与实现 摘 要 由于APP软件在开发以及运营上面所需成本较高 而用户手机需要安装各种APP软件 因此占用用户过多的手机存储空间 导致用户手机运行缓慢 体验度比较差 进而导致用户会卸载非必要的
  • 双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

    前言 前两天 我收到了阿里巴巴的实习offer 从学长内推开始面试到拿到最后offer经历了4面技术 一面交叉面和一面HR面 经过了漫长的等待和几次几乎折磨的面试之后 终于拿到了实习offer 自我介绍 本人来自西南某双非本科学校 该校学的
  • 这应该是最全的大模型训练与微调关键技术梳理

    作为算法工程师的你是否对如何应用大型语言模型构建医学问答系统充满好奇 是否希望深入探索LLaMA ChatGLM等模型的微调技术 进一步优化参数和使用不同微调方式 现在我带大家领略大模型训练与微调进阶之路 拓展您的技术边界 通过阅读文章 你
  • 【计算机毕设文章】微信点餐小程序

    微信点餐小程序 摘 要 随着社会的发展 社会的方方面面都在利用信息化时代的优势 互联网的优势和普及使得各种系统的开发成为必需 本文以实际运用为开发背景 运用软件工程原理和开发方法 它主要是采用java语言技术和mysql数据库来完成对系统的
  • 第三章 Linux的目录结构

    第三章 Linux的目录结构 学习目标 1 熟悉Linux目录的组织习惯 2 熟悉一些Linux的常见目录及作用 第一节 Linux中的常见目录 Linux常见的目录结构 不同版本的Linux目录结构可能略有不同 Centos7的文件目录结
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • Tor网络原理详解

    引入 匿名通信是一种通过采用数据转发 内容加密 流量混淆等措施来隐藏通信内容及关系的隐私保护技术 为了提高通信的匿名性 这些数据转发链路通常由多跳加密代理服务节点构成 而所有这些节点即构成了匿名通信系统 或称匿名通信网络 匿名通信系统本质上
  • 数据恢复及U盘、硬盘的性能检测

    前言 本文论述了如何查看磁盘是否为扩容盘 问题盘 坏盘 以及如何恢复磁盘删除的数据 如何避免黑客恢复数据 原文 原创作者 冷墨寒 博客 网安冷墨寒 定期分享网安技术教程以及网络资源 https www ink0 cn 因为最近需要买个移动机
  • 基于鲸鱼算法优化长短期记忆神经网络WOA-LSTM的故障诊断附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 代码获取 论文复现及科研仿真合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab完整代码及仿真定制内容点击 智能优化算法 神经网络预测 雷达通信
  • 【最新版】PyCharm实用插件

    文章目录 一 安装插件 捆绑的插件 二 实用插件 1 Chinese Simplified Language Pack 中文语言包 概览 2 Rainbow Brackets
  • 设计模式详解---策略模式

    1 策略模式简介 策略模式 Strategy Pattern 是一种行为型设计模式 用于在运行时根据不同的情境选择不同的算法或策略 该模式将算法封装成独立的类 使得它们可以相互替换 而且可以独立于客户端使用它们的方式 1 1 主要角色 上下