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

使用策略模式彻底消除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);

    }
}

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

相关文章:

  • 记一次简单的PHP反序列化字符串溢出
  • gitlab高级功能之CI/CD组件 - 实践(二)
  • 二叉树刷题Leetcode
  • vscode中使用luaide-lite插件断点调试cocos2dx-lua
  • python程序内存泄漏的解决方法
  • flutter 自定义TabBar 【top 0 级别】
  • 【Android踩过的坑】13.Android Studio 运行成功,但APP没有安装上的问题
  • 项目中如何配置数据可视化展现
  • mysql多表重复数据只保留一行的思路
  • OpenCV简介及安装
  • java多线程CountDownLatch简单测试
  • lodash常见的方法
  • Centos7安装docker、java、python环境
  • ubuntu/vscode下的c/c++开发之-CMake语法与练习
  • 网狐类源码游戏配置数据库数据(一键配置网狐数据库)
  • Kubernetes v1.28.4 安装笔记
  • Linux常用命令----history命令
  • Find My键盘|苹果Find My技术与键盘结合,智能防丢,全球定位
  • Git常用命令#更改用户名
  • web:ics-05(本地文件包含漏洞、preg_replace函数/e漏洞、php伪协议读取文件)
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单
  • 福州千余公共道路泊车位装“智能地锁”续:运营公司被责令改正并罚款
  • 2025年上海好护士揭晓,上海护士五年增近两成达12.31万人