广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JAVA设计模式中的策略模式你了解吗
  • 457
分享到

JAVA设计模式中的策略模式你了解吗

2024-04-02 19:04:59 457人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录策略模式策略模式是什么策略模式的使用场景策略模式实践总结策略模式 世界上本没有模式; 一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇; 并整理出固定的写法规范,这个

策略模式

世界上本没有模式;

一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇;

并整理出固定的写法规范,这个写法规范目前收录有23种

这些规范被称之为 --> 设计模式

策略模式是什么

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

策略模式的使用场景

Q: 我们知道策略模式最重要的就是封装变化点,那边对于变化点我们一般用什么处理呢?

A: 是的 我们一般用if - else 处理需要对变化点做出不同的反应,策略模式就可以替换代码中的if - else操作

其实策略模式主要就是替换代码中的if - else操作,当然也可以是switch

Q: 那我就有个疑问了,我就喜欢写if - else switch,我为什么要用策略模式呢,难道就是为了看起来牛逼吗?

A: 首先并不是所有的if - else switch 都适合使用策略模式改造,策略模式可谓是把双刃剑,使用时也会带来一些问题,比如说实现类膨胀;

Q: 既然是把双刃剑,那么如何判断是否应该使用策略模式呢?

A: 策略模式对标的是代码中的if - else操作,主要针对if - else 的嵌套层级和每个if - else下的代码处理行数;

(你的if - else 判断多余两次) && (每个if - else 下的处理代码超过5行) -> 建议使用策略模式优化代码

策略模式实践

我们使用一个简单的计算器需求来模拟策略模式的使用场景


public class Calculator {

    
    public Integer calculate(Integer num1, Integer num2, String operator) {

        if(operator.equals("+")){
            return num1 + num2;
        }else if(operator.equals("-")){
            return num1 - num2;
        }
        throw new RuntimeException("无效的操作算法");
    }
}

以上代码使用if-else代码实现了一个简单的计算器代码,实现也完全没大问题,但是也存在弊端

1.扩展性不好,比如扩展乘法需要在代码中追加if-else

2.一两个if-else还好如果操作算法多了以后影响代码的可读性

下面使用策略模式对这个代码进行优化



public class Calculator2 {

    private  Map<String,CalculatorOperator> calculatorOperatORMap = new HashMap<>();

    public Calculator2(){
        CalculatorOperatorAddImpl calculatorOperatorAdd = new CalculatorOperatorAddImpl();
        CalculatorOperatorSubImpl calculatorOperatorSub = new CalculatorOperatorSubImpl();
        calculatorOperatorMap.put(calculatorOperatorAdd.getOperator(),calculatorOperatorAdd);
        calculatorOperatorMap.put(calculatorOperatorSub.getOperator(),calculatorOperatorSub);
    }

    
    public Integer calculate(Integer num1, Integer num2, String operator) {
        CalculatorOperator calculatorOperator = calculatorOperatorMap.get(operator);
        if(calculatorOperator == null){
            throw new RuntimeException("无效的操作算法:" + operator);
        }
        return calculatorOperator.calculate(num1, num2);
    }

    
    public enum Operator{
        ADD("+"),SUB("-");

        private String operator;

        Operator(String operator){
            this.operator = operator;
        }

        public String getOperator() {
            return operator;
        }

        public void setOperator(String operator) {
            this.operator = operator;
        }
    }

    
    public interface CalculatorOperator{
        
        public String getOperator();

        
        public Integer calculate(Integer num1, Integer num2);
    }

    
    public class CalculatorOperatorAddImpl implements CalculatorOperator{

        @Override
        public String getOperator() {
            return Operator.ADD.getOperator();
        }

        
        public Integer calculate(Integer num1, Integer num2) {
         return num1 + num2;
        }
    }

    
    public class CalculatorOperatorSubImpl implements CalculatorOperator{

        @Override
        public String getOperator() {
            return Operator.SUB.getOperator();
        }

        
        public Integer calculate(Integer num1, Integer num2) {
            return num1 - num2;
        }
    }

    @Test
    public void testCalculate(){
        System.out.println("1+1 = : " + calculate(1,1,"+"));
        System.out.println("1-1 = : " + calculate(1,1,"-"));
        System.out.println("1*1 = : " + calculate(1,1,"*"));
    }
}

策略模式以后类比较多,画个简单的图方便理解

在这里插入图片描述

其实这里结合工厂模式更好用,使用Map calculatorOperatorMap其实也一个意思;

可以看到使用策略模式以后类膨胀非常厉害,从之前1个类膨胀到4个类,但是扩展性得到了大大的提升,后续的算法扩展只需要在枚举中新增枚举类,实现响应的算法实现即可;

综上示例策略模式优势如下几点:

1.扩展性提升;

2.主体业务逻辑更清晰;

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!   

--结束END--

本文标题: JAVA设计模式中的策略模式你了解吗

本文链接: https://www.lsjlt.com/news/144043.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA设计模式中的策略模式你了解吗
    目录策略模式策略模式是什么策略模式的使用场景策略模式实践总结策略模式 世界上本没有模式; 一些程序老鸟在长时间的编程工作总结出高效的代码写法被后世推崇; 并整理出固定的写法规范,这个...
    99+
    2022-11-13
  • 深入了解Java设计模式之策略模式
    目录定义解决的问题核心要点类图溢出效用代码实现核心接口实现类-三个Context类Main方法拓展JDK源码Spring源码定义 定义了算法家族,分别封装起来,让他们之间可以相互替换...
    99+
    2022-11-13
  • java设计模式--策略模式详解
    目录策略模式Demo代码:总结策略模式 策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来...
    99+
    2022-11-12
  • JAVA设计模式---原型模式你了解吗
    目录介绍角色Java语言提供的clone()方法代码演示—克隆羊结论深浅拷贝深浅拷贝探讨实现深克隆的方式一 : 手动对引用对象进行克隆实现深克隆的方式二 :序列化原型模式对单例模式的...
    99+
    2022-11-12
  • Java设计模式之java策略模式详解
    目录为什么使用策略模式?策略模式包含角色策略模式的类图排序案例策略模式的优点策略模式的缺点适用场景源码分析策略模式的典型应用Java Comparator 中的策略模式参考文...
    99+
    2022-11-12
  • Java设计模式之策略模式
    在一个收银系统中,如果普通用户、中级会员、高级会员分别对应着不同的优惠策略,常规编程就要使用一系列的判断语句,判断用户类型,这种情况下就可以使用策略模式。 一、概念理解 策略模式的概...
    99+
    2022-11-13
    Java 设计模式 策略模式
  • Java 设计模式中的策略模式详情
    目录策略模式的应用场景是否符合有没有必要不用策略模式例子使用策略模式策略上下文策略接口以及具体实现类Main类两种方式的不同策略模式有没有必要使用?如何避免Context类使用判断逻...
    99+
    2022-11-13
  • C++设计模式中的桥模式你了解吗
    目录单一职责模式:典型模式Bridge动机(Motivation)模式定义结构要点总结cpp总结单一职责模式: 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着...
    99+
    2022-11-13
  • 怎么理解Java设计模式的策略模式
    这篇文章主要讲解了“怎么理解Java设计模式的策略模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的策略模式”吧!一、什么是策略模式策略模式定义了一系列算法,并将每...
    99+
    2023-06-25
  • 深入了解Java行为型设计模式之策略模式
    目录策略模式应用场景优缺点主要角色策略模式的基本使用创建抽象策略角色创建具体策略角色创建上下文角色客户端执行策略模式实现支付方式的选择创建抽象策略角色创建具体策略角色创建上下文角色客...
    99+
    2022-11-13
  • Python设计模式中的策略模式详解
    目录策略模式命令模式策略模式 策略模式是一个经典的模式,简化代码。 电商领域有个功能明细可以使用“策略”模式,就是根据客户的属性或订单中的商品计算折扣。 比如...
    99+
    2023-02-08
    Python策略模式 Python设计模式
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2022-11-13
  • Python设计模式中的状态模式你了解吗
    目录状态模式应用场景代码示例总结状态模式 状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。 优点: 封装了状态转换规则。枚举了可能的状态,在枚举状态之前需要确定...
    99+
    2022-11-13
  • Java设计模式之策略模式案例详解
    目录优缺点Spring中哪里使用策略模式策略模式设计图代码案例为什么使用策略模式 答:策略模式是解决过多if-else (或者switch-case)代码块的方法之一,提高代码的可维...
    99+
    2022-11-13
  • Java设计模式之策略模式示例详解
    目录定义结构UML类图UML序列图深入理解策略模式策略和上下文的关系策略模式在JDK中的应用该策略接口有四个实现类策略模式的优点策略模式的缺点策略模式的本质在讲策略模式之前,我们先看...
    99+
    2022-11-13
  • 深入理解Java设计模式之策略模式
    目录一、什么是策略模式二、策略模式的结构三、策略模式的应用场景四、策略模式的优缺点六、策略模式的实现七、策略模式和简单工厂模式的结合八、策略枚举的实现九、总结一、什么是策略模式 策略...
    99+
    2022-11-12
  • Java特性之设计模式【策略模式】
    一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随...
    99+
    2023-10-18
    策略模式 java 设计模式
  • java设计模式的策略模式是什么
    这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
    99+
    2023-07-02
  • JavaScript设计模式之策略模式详解
    什么是设计模式?为什么需要学习设计模式? 学习设计模式的目的是:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络...
    99+
    2022-11-13
  • Java23种设计模式中的单例模式你了解吗
    目录1、定义2、适用场景3、常见写法4、如何防止单例被破坏1.多线程破坏单例以及解决方法2.反射破坏单例以及解决方法3.序列化破坏单例以及解决方法5、优缺点6、总结1、定义 单例模式...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作