• 优化太多的if-else


    来源java小当家
    • 第1种方法:提前return,减少else判断

     1  // 1.优化前
     2     private int handlerPre1(boolean flag) {
     3         if(flag){
     4             // TODO
     5             return 0;
     6         }else{
     7             // TODO
     8             return -1;
     9         }
    10     }
    11     // 第1种方法:提前return,减少else判断
    12     // 这个做法,将可以return的状态提到if中,直接干掉else
    13     private int handlerAfter1(boolean flag) {
    14         if(!flag){
    15             // TODO
    16             return -1;
    17         }
    18         return 0;
    19     }
    • 第2种方法:使用三目运算符

     1 // 2.优化前
     2     private int handlerPre2(boolean flag) {
     3         if(flag){
     4             return 0;
     5         }else{
     6             return -1;
     7         }
     8     }
     9     // 第2种方法:使用三目运算符
    10     // 对那些依据状态直接返回某个值的情况非常适用,但如果三目运算符中还镶嵌三目运算,建议不要使用
    11     private int handlerAfter2(boolean flag) {
    12         return flag?0:-1;
    13     }
    • 第3种方法:使用Optional

     1     // 3.优化前
     2     private Integer handlerPre3(){
     3         User user = new User();
     4         if(user != null){
     5             return user.getAge();
     6         }
     7         return null;
     8     }
     9     // 第3种方法:使用Optional
    10     // Optional让非空校验更加优雅,代码层面减少了if判断。
    11     private Integer handlerAfter3(){
    12         User user = new User();
    13         Optional<User> optional = Optional.ofNullable(user);
    14         return optional.map(User::getAge).orElse(null);
    15     }
    • 第4种方法:使用switch

     1 // 4.优化前
     2     private String getCnPre(String en){
     3         String cn;
     4         if("student".equals(en)){
     5             cn = "学生";
     6         }else if("teacher".equals(en)){
     7             cn = "教师";
     8         }else{
     9             cn = "未知";
    10         }
    11         return cn;
    12     }
    13 
    14     // 4.1 优化后 使用switch
    15     private String getCnAfter1(String en){
    16         switch (en) {
    17             case "student":
    18                 return "学生";
    19             case "teacher":
    20                 return "教师";
    21             default:
    22                 return "未知";
    23         }
    24     }
    • 第5种方法:使用枚举

     1 public enum CnEnum {
     2     STUDENT("student","学生"),
     3     TEACHER("teacher","教师"),
     4     UNKNOWN("unknown","未知");
     5     private String en;
     6     private String cn;
     7 
     8     public String getEn() {
     9         return en;
    10     }
    11     public void setEn(String en) {
    12         this.en = en;
    13     }
    14     public String getCn() {
    15         return cn;
    16     }
    17     public void setCn(String cn) {
    18         this.cn = cn;
    19     }
    20     CnEnum(String en, String cn) {
    21         this.en = en;
    22         this.cn = cn;
    23     }
    24 
    25     static String of(String en){
    26         for (CnEnum temp : CnEnum.values()){
    27             if(temp.getEn().equals(en)){
    28                 return temp.getCn();
    29             }
    30         }
    31         return CnEnum.UNKNOWN.getCn();
    32     }
    33 }
    1  // 4.2 优化前 使用枚举
    2     private String getCnAfter2(String en){
    3         return CnEnum.of(en);
    4     }
    • 第6种方法:使用工厂模式

        (1)定义一个职业接口,里面定义一个输出方法

    1 public interface Profession {
    2     String output();// 输出
    3 }

        (2)每增加一种职业,都实现这个接口(策略模式)

     1 public class Teacher implements Profession{
     2     @Override
     3     public String output() {
     4         return "教书";
     5     }
     6 }
     7 
     8 public class Student implements Profession{
     9     @Override
    10     public String output() {
    11         return "学习";
    12     }
    13 }

        (3)定义一个工厂类,用来根据具体情况生产各种职业类(工厂模式)

     1 public class ProfessionFactory {
     2 
     3     private static Map<String,Profession> map = new HashMap<>();
     4     private static final Profession DEFAULT_PROFESSION = new DefaultProfession();
     5     static {
     6         map.put("student",new Student());
     7         map.put("teacher",new Teacher());
     8         map.put("default",DEFAULT_PROFESSION);
     9     }
    10     public static Profession getProfession(String en){
    11         Profession profession = map.get(en);
    12         return profession == null?DEFAULT_PROFESSION:profession;
    13     }
    14 
    15     static class DefaultProfession implements Profession {
    16         @Override
    17         public String output() {
    18             return "未知";
    19         }
    20     }
    21 
    22 }

        (4)测试

    1  // 5.优化后 使用 策略模式+工厂模式
    2     // 1.定义一个职业接口,里面定义一个输出方法
    3     // 2.每增加一种职业,都实现这个接口(策略模式)
    4     // 3.定义一个工厂类,用来根据具体情况生产各种职业类(工厂模式)
    5     private void handlerAfter5(String en){
    6         Profession profession = ProfessionFactory.getProfession(en);
    7         System.out.println(profession.output());
    8     }
  • 相关阅读:
    jdbc入门
    mysql 各项操作流程
    python中的细小知识点罗列
    Linux之高级指令
    linux之进阶指令
    Linux之基础指令
    STL之适配器
    STL之谓词
    STL之函数对象
    STL之map容器和multimap容器
  • 原文地址:https://www.cnblogs.com/zcjyzh/p/14271661.html
Copyright © 2020-2023  润新知