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

结果:

相关推荐
默阳12342 小时前
2026年Android中高级面试题专栏(Android进阶篇)
android
古法安卓3 小时前
Android-日志系统源码解析
android·java·android studio
恋猫de小郭4 小时前
Android 17 + OkHttp 5.5.0 ,全新 ECH 下你的 HTTPS 域名可以请求时被安全隐藏
android·前端·flutter
小强闯江湖4 小时前
不只是让 AI 写代码:ViewCompose 把 Android UI 做成了可编译、可渲染的闭环
android·人工智能·kotlin
小夏coding4 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng5 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
hunterandroid6 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端
YF02116 小时前
Android遥控器对频详解
android·android things
十年Java程序媛7 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
码农coding7 小时前
android12 WindowManagerService窗口的布局过程
android·源码