还在写if?试试枚举策略

简介: 日常开发中或者代码优化过程中,一定会遇到不少的if语句,如果判断逻辑多了,会导致代码极其冗余,阅读性也会大打折扣,"消灭"if语句的方式有很多,也分不同的场景,本文将使用枚举策略的方式优化繁琐的if语句,你可以参考下文。

前言

image (1).png
日常开发中或者代码优化过程中,一定会遇到不少的if语句,如果判断逻辑多了,会导致代码极其冗余,阅读性也会大打折扣,"消灭"if语句的方式有很多,也分不同的场景,本文将使用枚举策略的方式优化繁琐的if语句,你可以参考下文。

Example

package org.example.strategy;

import java.util.HashMap;

/**
 * @author Duansg
 * @date 2022-11-22 11:19 上午
 */
public class Example {

    /**
     *
     * @param args
     */
    public static void main(String[] args) {

        final HashMap<String, Long> carsMap = new HashMap<String, Long>() {
            {
                put(CarContant.BMW, 100000L);
                put(CarContant.BENZ, 88888L);
                put(CarContant.AUDI, 77777L);
            }
        };

        if (carsMap.containsKey(CarContant.BMW)) {
            System.out.printf("这是一辆宝马, 价格:%s%n", carsMap.get(CarContant.BMW));
        }

        if (carsMap.containsKey(CarContant.BENZ)) {
            System.out.printf("这是一辆奔驰, 价格:%s%n", carsMap.get(CarContant.BENZ));
        }
        if (carsMap.containsKey(CarContant.AUDI)) {
            System.out.printf("这是一辆奥迪, 价格:%s%n", carsMap.get(CarContant.AUDI));
        }

    }

    /**
     *
     */
    public static class CarContant {

        public static final String BMW = "BMW";

        public static final String BENZ = "BENZ";

        public static final String AUDI = "AUDI";
    }
}

StrategyExample

package org.example.strategy;

import java.util.Objects;
import java.util.stream.Stream;

/**
 * @author Duansg
 * @date 2022-11-22 11:24 上午
 */
public enum StrategyExample {

     /**
     *
     * @param args
     */
    public static void main(String[] args) {

        final HashMap<String, Long> carsMap = new HashMap<String, Long>() {
            {
                put(CarContant.BMW, 100000L);
                put(CarContant.BENZ, 88888L);
                put(CarContant.AUDI, 77777L);
            }
        };

        carsMap.forEach(StrategyExample::format);
    }

    /**
     *
     */
    BMW(Example.CarContant.BMW) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆宝马, 价格:%s%n", price);
        }
    },

    BENZ(Example.CarContant.BENZ) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆奔驰, 价格:%s%n", price);
        }
    },

    AUDI(Example.CarContant.AUDI) {

        @Override
        public void print(Long price) {
            System.err.printf("这是一辆奥迪, 价格:%s%n", price);
        }
    };

    /**
     * 汽车名称
     */
    private String carName;

    /**
     * 格式化方法
     *
     * @param carName
     * @param price
     */
    public static void format(String carName, Long price) {

        if (Objects.isNull(carName)) {
            return;
        }

        final StrategyExample strategyExample = Stream.of(StrategyExample.values())
                .filter(strategy -> strategy.getCarName().equals(carName))
                .findFirst()
                .orElse(null);

        if (Objects.isNull(strategyExample)) {
            return;
        }

        strategyExample.print(price);
    }

    /**
     * 打印方法
     *
     * @param price
     */
    public abstract void print(Long price);

    /**
     *
     * @param carName
     */
    StrategyExample(String carName) {
        this.carName = carName;
    }

    /**
     *
     * @return
     */
    public String getCarName() {
        return carName;
    }
}
目录
相关文章
|
6月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
221 4
Swift开发——属性检查器
|
7月前
|
缓存 自然语言处理 Java
还在为字典值、枚举值校验烦恼吗,不妨试试这个
本文介绍了如何在Java中实现常量值校验的封装,主要包括两个方面:字典值类型的校验和枚举类型的校验。首先,作者提到在进行数据验证时,实体类字段需要添加`@Valid`注解。然后,对于字典值类型的校验,可以通过`@DictVaild`注解检查当前字段值是否在数据库中的字典值类别内,或者与预定义的枚举类中的值相匹配。在进行校验时,可以设置`dictType`参数为`DictType.CODE`或`DictType.LABEL`来分别验证代码值或标签值。
157 0
枚举的使用和注意事项
枚举的使用和注意事项
52 0
枚举的简单使用以及案例
枚举的简单使用以及案例
93 0
枚举的简单使用以及案例
|
存储 监控 前端开发
行动策略过于复杂怎么办?试试下面一些解决方法
随着使用SLS告警越来越深入,有些用户的行动策略会配置的特别复杂,有些时候可以让用户通过创建多个行动策略来进行一定的精简,但是在一些场景下,用户是无法创建多个行动策略的。
243 0
行动策略过于复杂怎么办?试试下面一些解决方法
|
JavaScript 网络架构
ES6知识点补充——剩余参数、展开语法
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解剩余参数、展开语法
194 0
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节
|
测试技术
软件测试面试题:lr中,哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联)
软件测试面试题:lr中,哪个函数是用来截取虚拟用户脚本中的动态值?(手工关联)
111 0
|
测试技术 数据库
软件测试面试题:在哪里设置自动关联的选项?
软件测试面试题:在哪里设置自动关联的选项?
94 0
|
设计模式 Java 开发者
实战小技巧6:枚举的特殊用法
难道我们日常使用的枚举还有什么特殊的玩法不成?没错,还真有,本文主要介绍枚举的两种不那么常见的使用姿势
146 0