当前位置: 首页 > article >正文

使用策略模式彻底消除if-else

文章目录

    • 使用策略模式彻底消除if-else
      • 1. 场景描述
      • 2. if-else方式
      • 3. 策略模式

使用策略模式彻底消除if-else

如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现,这样会显得代码逻辑很臃肿,那么有没有方式去消除这种逻辑呢?答案当然是有,那就是使用策略模式

1. 场景描述

接下来我们演示一下根据传入的不同参数执行不同的计算功能:

 - 如果传入的是PLUS,执行数据a+b计算;
 - 如果传入的是MINUS,执行数据a-b计算;
 - 如果传入的是MULTIPLY,执行数据a*b计算;
 - 否则执行数据a/b计算。

2. if-else方式

public class StrategyDemo {
    public static void main(String[] args) {
        Integer result = count(3, 5, "MULTIPLY");
        System.out.println(result);
    }

    public static Integer count(Integer a, Integer b, String opt) {
        if ("PLUS".equals(opt)) {
            return a + b;
        } else if ("MINUS".equals(opt)){
            return a - b;
        } else if ("MULTIPLY".equals(opt)) {
            return a * b;
        } else {
            return a / b;
        }
    }
}

3. 策略模式

定义计算接口

public interface ArithmeticOperation {

    /**
     * 计算
     *
     * @param a 待计算值
     * @param b 待计算值
     * @return 计算结果
     */
    int calculate(int a, int b);
}

定义枚举类并实现计算接口

public enum ArithmeticEnum implements ArithmeticOperation{

    /**
     * 加
     */
    PLUS {
        @Override
        public int calculate(int a, int b) {
            return a + b;
        }
    },
    /**
     * 减
     */
    MINUS {
        @Override
        public int calculate(int a, int b) {
            return a - b;
        }
    },
    /**
     * 乘
     */
    MULTIPLY {
        @Override
        public int calculate(int a, int b) {
            return a * b;
        }
    },
    /**
     * 除
     */
    DIVIDE {
        @Override
        public int calculate(int a, int b) {
            return a / b;
        }
    };

}

使用

public class StrategyDemo {


    public static void main(String[] args) {
        
        Integer result = count(3, 5, "MULTIPLY");

        System.out.println(result);

    }

    public static Integer count(Integer a, Integer b, String opt) {

        ArithmeticEnum arithmeticEnum = ArithmeticEnum.valueOf(opt);
        return arithmeticEnum.calculate(a, b);

    }
}

测试运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/154130.html

相关文章:

  • css 使用图片作为元素边框
  • 十二:HTTP错误响应码:理解与应对
  • 数据处理与统计分析——05-Pandas中DataFrame的方法、属性、索引等一系列操作
  • 2024年了,TCP分析工具有哪些?
  • 深度学习笔记14-卷积神经网络2
  • FPGA开发-逻辑分析仪的应用-数字频率计的设计
  • 代币化:2024年的金融浪潮预示着什么?
  • TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
  • Redis部署-主从模式
  • 【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】
  • 如何查看当前conda可供安装的所有pytorch版本
  • 智慧工地平台源码,支持多端展示:PC端、手机端、平板端,实现数据同步
  • iview弹窗提交问题优化
  • 安卓开发学习---kotlin版---笔记(一)
  • Mongodb使用killCursors停止运行的cursor
  • JOSEF 快速中间继电器 KZJ-4H-L DC220V 导轨安装
  • Jetson Nano部署YOLOv5与Tensorrtx加速
  • 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛
  • JavaWeb | JavaScript基础
  • 视频监控平台EasyCVR多场景应用,AI视频分析技术助力行业升级转型
  • 国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换
  • 解锁 ElasticJob 云原生实践的难题
  • AWS中使用ECS时ecsTaskExecutionRole缺失
  • Linux:锁定部分重要文件,防止误操作
  • 信奥编程 1168:大整数加法
  • 聊聊测试for Jeffky