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

结果:

相关推荐
2501_916007471 分钟前
iOS 26 能耗检测实战指南,升级后电池掉速是否正常 + KeyMob + Instruments 实时监控 + 优化策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_916013745 分钟前
苹果上架 App 全流程详解,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 测试与 App Store 审核经验
android·ios·小程序·https·uni-app·iphone·webview
2501_9159090619 分钟前
HTML 开发工具有哪些?常用 HTML 开发工具推荐、学习路线与实战经验分享
android·小程序·https·uni-app·iphone·webview
教游泳的程序员22 分钟前
【JDBC】系列文章第一章,怎么在idea中连接数据库,并操作插入数据?
java·ide·mysql·intellij-idea
懒羊羊不懒@24 分钟前
C语言指针进阶(进阶)
java·开发语言·面试
nlog3n31 分钟前
分布式秒杀系统设计方案
java·分布式
间彧32 分钟前
JWT(JSON Web Token)详解
java
前路不黑暗@38 分钟前
Java:代码块
java·开发语言·经验分享·笔记·python·学习·学习方法
canonical-entropy1 小时前
NopReport示例-动态Sheet和动态列
java·windows·可逆计算·nop平台·报表引擎
zero13_小葵司1 小时前
基于Springboot的DDD实战(不依赖框架)
java·spring boot·log4j