23种设计模式

1、策略枚举

1、策略枚举

  • 使用策略枚举消除大量使用的if else
  • 使用大量 if-else
javascript 复制代码
public class IfService {
    public String getToDo(String day) {
        if ("Monday".equals(day)) {
            return "今天上英语课";
        } else if ("Tuesday".equals(day)) {
            return "今天上语文课";
        } else if ("Wednesday".equals(day)) {
            return "今天上数学课";
        } else if ("Thursday".equals(day)) {
            return "今天上音乐课";
        } else if ("sunday".equals(day)) {
            return "今天上编程课";
        } else {
            return null;
        }
    }
    public static void main(String[] args) {
        IfService ifService = new IfService();
        System.out.println(ifService.getToDo("Monday"));
    }
}

结果:

  • 使用枚举类进行优化大量if -else
javascript 复制代码
public class CheckDay {
    public String day(DayEnum dayEnum){
        return  dayEnum.toDo();
    }

}
javascript 复制代码
public enum DayEnum {
    Monday{
        @Override
        public String toDo(){
            return "周一";
        }
    },
    Tuesday{
        @Override
        public String toDo(){
            return "周二";
        }
    },
    Wendsday{
        @Override
        public String toDo(){
            return "周三";
        }
    },
    Thursday{
        @Override
        public String toDo(){
            return "周四";
        }
    },
    Friday{
        @Override
        public String toDo(){
            return "周五";
        }
    };
    public abstract String toDo();
}
javascript 复制代码
    public static void main(String[] args) {
        CheckDay checkDay = new CheckDay();
        //可以传递参数选择哪个 枚举对象
        String monday = checkDay.day(DayEnum.valueOf("Monday"));
        System.out.println(monday);
    }
}
  • 另一种情况
javascript 复制代码
    public String getToDo(String day) {
        //第一种情况
//        if ("Monday".equals(day)) {
//            return "今天上英语课";
//        } else if ("Tuesday".equals(day)) {
//            return "今天上语文课";
//        } else if ("Wednesday".equals(day)) {
//            return "今天上数学课";
//        } else if ("Thursday".equals(day)) {
//            return "今天上音乐课";
//        } else if ("sunday".equals(day)) {
//            return "今天上编程课";
//        } else {
//            return null;
//        }

     //第二种情况
        if("Monday".equals(day)||"Tuesday".equals(day)||"Wednesday".equals(day)){
            return "今天上英语课";
        }else if("Thursday".equals(day)){
            return null;
        }
        return null;
    }
javascript 复制代码
public class CheckDay {
    public String dayNew(DayEnumNew dayEnumNew) {
        return dayEnumNew.toDo();
    }
}
javascript 复制代码
public enum DayEnumNew {

    Monday(Type.ENGLISH, "星期一"),
    Tuesday(Type.ENGLISH, "星期二"),
    Wednesday(Type.ENGLISH, "星期三"),
    Thursday(Type.CHINESE, "星期四");

    private final Type type;
     private final String day;

    DayEnumNew(Type type, String day) {
        this.type = type;
        this.day = day;
    }
    String toDo(){
       return type.toDo();
    }

    /**
     * 内部策略枚举
     */
    private enum Type {
        ENGLISH {
            @Override
            public String toDo() {
                return "今天上英语课";
            }
        },
        CHINESE {
            @Override
            public String toDo() {
                return "今天上语文课";
            }
        };
        public abstract String toDo();
    }
}
javascript 复制代码
    public static void main(String[] args) {
        CheckDay checkDay = new CheckDay();
        //可以传递参数选择哪个 枚举对象
//        String monday = checkDay.day(DayEnum.valueOf("Monday"));
//        System.out.println(monday);
        String monday = checkDay.dayNew(DayEnumNew.valueOf("Monday"));
        String thursday = checkDay.dayNew(DayEnumNew.valueOf("Thursday"));
        String thursday1 = checkDay.dayNew(DayEnumNew.valueOf("Wednesday"));
        System.out.println(monday);
        System.out.println(thursday);
        System.out.println(thursday1);
    }

结果:

相关推荐
步行cgn4 分钟前
适配器设计模式:一个“翻译官”的故事
设计模式
高冷小鱼殿下5 分钟前
内部类Lambda与枚举
java·开发语言
小蒜学长44 分钟前
编程语言在线学习平台的设计与实现(代码+数据库+LW)
java·spring boot·后端·编程语言在线学习平台·在线编码
步行cgn1 小时前
Spring MVC 执行流程详解:一次请求的完整旅程
java·spring·mvc
增量星球1 小时前
Spring AI 2.0 Tool Calling 到底怎么跑起来的:从 @Tool 到两次模型调用
java·agent·springai·ai coding
步行cgn1 小时前
Spring MVC 九大核心角色详解:请求处理链路中的每一个关键组件
java·spring·mvc
智恒百亿1 小时前
一台 5090 八卡服务器怎么分给一个团队用?多模型多任务的显存分配实战
java·大数据·人工智能
TimeFine1 小时前
AI 编码工作流的设计(二)
android·ai编程
2401_881828322 小时前
MySQL操作命令
android·mysql·adb
瑞码空间2 小时前
面向接口编程与开闭原则在模拟 JDBC 驱动中的应用
java·jdbc