策略模式

策略模式详解 1.简介 在现实生活中长长遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超时促销可以采用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加。删除或更换算法要修改原代码,不易维护,违背开闭原则。如 阅读详情

一.小结

  • 定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

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

  • 优点:1.算法可以自由切换 2.避免使用多重条件判断 3.拓展性好

  • 缺点:1.策略类会增多 2.所有策略类都需要对外暴露。

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

  • 通用UML图:

    策略模式

二.例子

  在学习程序的时候,策略模式的"计算器"十分经典,列举如下:

  • 抽离两数运算的算法

    public interface IOperate {
        int operate(int num1, int num2);
    }
    
  • 具体的策略子类

    // 加法运算
    public class AddOperate implements IOperate {
        @Override
        public int operate(int num1, int num2) {
            return num1 + num2;
        }
    }
    
    // 减法运算
    public class SubOperate implements IOperate {
        @Override
        public int operate(int num1, int num2) {
            return num1 - num2;
        }
    }
    ...
    
  • 封装类

    // 传入两个数和运算符号,返回结果
    public class Calculator {
    
        private IOperate operator;
    
        public Calculator(IOperate operator) {
            this.operator = operator;
        }
    
        public int operate(int num1, int num2) {
            return operator.operate(num1, num2);
        }
    }
    
  • 情景类

    public class Client {
    
        public static void main(String[] args) {
            int num1 = 6, num2 = 3;
            // 6 + 3
            AddOperate addOperate = new AddOperate();
            Calculator calc = new Calculator(addOperate);
            int sum = calc.operate(num1, num2);
            System.out.printf("%d + %d = %d \n", num1, num2, sum);
            // 6 - 3
            SubOperate subOperate = new SubOperate();
            calc = new Calculator(subOperate);
            int diff = calc.operate(num1, num2);
            System.out.printf("%d - %d = %d ", num1, num2, diff);
    
        }
    }
    
基础篇.ARM架构介绍(1) ARM公司主要向客户提供处理器IP。ARM体系结构是一种硬件规范,主要用来约定指令集、芯片内部体系结构等。以指令集为例,ARM体系结构并没规定每一条指令在硬件IP中如何实现,只是约定了每条指令的格式、行为规范、参数等。 阅读详情

相关推荐

arcgis导出自身相交数据

今天接到一个客户需求,一份面文件,里面有好多元素是两两相交甚至是三个相交的,现在要把这些重叠部分提取出来,并且把相交部分的原始要素的名称也保留在字段中,也就是说名称这个会有好多个名称字段,如果两个要素相交那就是前两个名称字段有值,后面的为空,如果是三个要素相交,那么输出的这个要素就是前三个名称字段有值,后面的为空,嗯,这里也不太确定会出现多少个名称字段,这个需要依照数据来定。 这是原始数据,...

miaowumi92的博客 6789

设计模式之策略模式使用

设计模式之策略模式的使用

xiangwang2016的博客 617

开关电源EMI滤波设计:如何通过Cx和Cy电容精准抑制共模与差模干扰?

本文深入解析了开关电源EMI滤波设计中Cx和Cy电容的核心作用。Cx电容并联于火线与零线之间,专用于抑制差模干扰;Cy电容连接于火线/零线与地之间,则负责泄放共模干扰。文章详细阐述了二者选型、安规要求及PCB布局要点,并提供了基于测试频谱的实战调优策略,是解决电源传导噪声问题的实用指南。

7z8x2c4v6b9的博客 468

以订单退款流程为例,聊聊如何优化策略模式

总结几个问题策略模式目的是:根据不同的业务场景选择不同的策略来执行相应的逻辑策略模式一定要进行细化,通过组合多个细分策略模式为一个更大的策略,避免使用继承方案。使用Spring XML 组合多个策略模式,可以避免开发。减少新增策略类使用Spring Configuration @Bean 将策略类注入Spring 更加优雅作者:五阳神功链接:https://juejin.cn/post/7295010992122101801来源:稀土掘金著作权归作者所有。

于海强的博客 980

NVIDIA 2025 Board Design Engineer 校招笔试

电路分析,矩形波阶跃反馈驱动​,误差信号。非常简单,数电or​离散基础。第一题是考试规矩知情确认。大二暑假做的,纯体验​。五六题太长,下篇分享。

m0_74253823的博客 1130

生存网络与mlr3proba

通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。

weixin_46587777的博客 1364

25. 策略模式

为什么80%的码农都做不了架构师?>>> ...

weixin_34194317的博客 362

BCIC IV 2a数据集实战:从MATLAB导入到EEG信号分析全流程

本文提供了BCIC IV 2a数据集从MATLAB导入到EEG信号分析的完整实战流程。详细解析了数据集结构,区分了EEG与EOG信号,并演示了信号可视化、基础预处理(滤波、分段、基线校正)等关键步骤,帮助脑机接口研究者快速上手处理这一经典运动想象数据集。

weixin_29047919的博客 470

java策略模式

目录 1 策略模式概述 2 策略模式的结构与实现 1. 模式的结构 2. 模式的实现 3 策略模式的应用实例 通用实现 报价管理的例子 策略和上下文的实例 1 策略模式概述  策略这个词应该怎么理解,打个比方说,我们出门的时候会选择不同的出行方式,比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等,这些出行方式,每一种都是一个策略。   再比如我们去逛商场,商场现在正在搞活动,有打折的、有满减的、有返利的等等,其实不管商场如何进行促销,说到底都是一些算法,这些算法本身只是一种策略,并且这

mocas_wang的博客 4513

Android框架WiFi架构

动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_spplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调试来对wifi芯片操作,简单的说,二、android wifi 系统架构:andtoid wifi 系统引入了wpa_supplicant,它的整个wifi系统。

手机-手表蓝牙开发工程师的博客 3459

Autosar软件组件分析及ARXML文件分析

Autosar软件组件分析及ARXML文件分析

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3602

策略模式详解以及在spring中策略模式的两种简化应用

策略模式,同样可以消除掉繁杂的if else ,那么它和简单工厂模式的区别在哪? 简单工厂模式是根据传入的参数返回不同的产品,不同的产品内部封装了不同的逻辑。 策略模式类似,但是策略模式内部是封装了算法,也就是封装了某一种策略。 举个例子,超市活动打折优惠,1.普通计费。 2.满300减20 3.满400减80 4.满500打八折 如果用简单工厂模式,那么需要定义四个产品子类,如果将来又新增了...

hello world 7782

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1766

策略模式的实现

策略模式就像是在餐厅点餐的过程。假设你和朋友一起去餐厅,你们可以根据自己的口味选择不同的菜肴。你可以点披萨,你的朋友可以点汉堡,而另一位朋友可以点沙拉。每个人都可以根据自己的喜好选择不同的策略(菜肴),但最终都能满足吃东西的需求。

Hardy Army的博客 1284

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【python】策略模式

策略模式。抽空学习下常见的20几种设计模式,python2.7来设计实现。基本就根据某设计模式书籍来实现python版本。希望能坚持下来全部介绍完。

weixin_42660118的博客 2624

visio安装包

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

策略模式&lambda重构策略模式

文章目录一、概念以及背景二、策略模式三、lambda重构策略模式三、拓展Java8提供的内置函数式接口 一、概念以及背景 策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户端而变化,也称为政策模式(Policy)。 简而言之,策略模式是客户端在运行时选择某种解决方案(策略,方法,算法)来解决问题,而解决方...

一砖一瓦 896

NTscan扫描工具

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

23种策略模式之策略模式

在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。策略模式与其他设计模式有一些明显的区别。与模板方法模式相比,策略模式强调算法的灵活性,允许在运行时切换不同的策略。与状态模式相比,策略模式更注重不同算法之间的替换性,而非状态的内部转换。策略Context(上下文)

一码归一码@ 1899

策略模式总结

文章目录策略模式一、什么是策略模式二、为什么要去使用策略模式三、框架中有哪些用到模板模式和策略模式四、项目实践中的策略模式实现五、总结1、策略模式的优缺点 策略模式 一、什么是策略模式 ​ 策略模式(Strategy Pattern),一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 ​ 策略模式适合于以下应用场景: 1)、许多类的区别仅在于其具体实现行为不同; 2)、需要动态的在几个算法中选择一个。 传统策略模式介绍: https://www.runoob.com/design

小发发的博客 768

【深入设计模式】策略模式—策略模式详解及策略模式在源码中的应用

详解策略模式,并深入策略模式再源码中的应用

SK_Jaco的博客 1357
上一篇: 装饰器模式
下一篇: 适配器模式
dongpingwang
博客等级 码龄9年 101粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值