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

结果:

相关推荐
马克学长4 分钟前
SSM基于Java的医疗器械销售系统oy281(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·用户管理·ssm 框架·医疗器械销售系统
_Power_Y12 分钟前
Linux&git入门&设计模式(常考点)
linux·git·设计模式
Seven9719 分钟前
MyBatis 常见面试题
java·mybatis
我命由我1234532 分钟前
Android WebView - loadUrl 方法的长度限制
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
前端架构师-老李39 分钟前
Maven安装以及环境变量配置(macOS)
java·macos·maven
Coffeeee43 分钟前
面试被问到Compose的副作用不会,只怪我没好好学
android·kotlin·android jetpack
Greenland_121 小时前
Android Gralde补全计划 productFlavors多渠道打包(变体/多客户)
android
Just_Paranoid1 小时前
【TaskStackListener】Android 中用于监听和响应任务栈
android·ams·task·taskstack
权泽谦1 小时前
从零搭建一个 PHP 登录注册系统(含完整源码)
android·开发语言·php
带刺的坐椅1 小时前
(对标 Spring IA 和 LangChain4j)Solon AI & MCP v3.7.0, v3.6.4, v3.5.8 发布(支持 LTS)
java·spring·ai·solon·mcp·langchain4j