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);
    }

结果:

相关推荐
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维1 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子2 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34162 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体13 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
xiaolyuh1233 小时前
Spring 框架 核心架构设计 深度详解
spring·设计模式·spring 设计模式
wszy18093 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18093 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
贺biubiu4 小时前
2025 年终总结|总有那么一个人,会让你千里奔赴...
android·程序员·年终总结