在实际项目中相信大家都遇到过令人糟心的代码,一个方法一溜下来全是if else,还写满了业务逻辑,代码如下:

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
public static void main(String[] args) {
      String name = "张三";
      if("张三".equals(name)){
         // 业务逻辑...
         System.out.println("我是张三");
      }else if("李四".equals(name)){
         // 业务逻辑...
         System.out.println("我是李四");
      }else if("王五".equals(name)){
         // 业务逻辑...
         System.out.println("我是王五");
      }else if("赵六".equals(name)){
         // 业务逻辑...
         System.out.println("我是赵六");
      }else if("钱七".equals(name)){
         // 业务逻辑...
         System.out.println("我是钱七");
      }else{
         // 业务逻辑...
      }
   }

是不是很熟悉,哈哈哈~

此时我们可以进行优化,巧用设计模式:策略模式+工厂方法

首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,我们根据每个逻辑条件,定义相对应的策略实现类,可得以下代码:

定义接口:

text
1 2 3
public interface NameService {
   String getName();
}

实现类:

text
1 2 3 4 5 6 7
public class ZhansanName implements NameService {
   @Override
   public void getName() {
      // 张三业务逻辑...
      System.out.println("我是张三");
   }
}
text
1 2 3 4 5 6 7 8
public class LisiName implements NameService {
   @Override
   public void getName() {
      // 李四业务逻辑...
      System.out.println("我是李四");
   }
}
text
1 2 3 4 5 6 7 8
public class WangwuName implements NameService {
   @Override
   public void getName() {
      // 王五业务逻辑...
      System.out.println("我是王五");
   }
}

......

工厂类:

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class NameServiceFactory {
   
   private static final Map<String, NameService> map = new HashMap<>();

   static {
      map.put("张三", new ZhansanName());
      map.put("李四", new LisiName());
      map.put("王五", new WangwuName());
      // ......
   }

   public static NameService getNameService(String name){
      return map.get(name);
   }

}

调用:

text
1 2 3 4
public static void main(String[] args) {
      NameService nameService = NameServiceFactory.getNameService("张三");
      nameService.getName();
   }

原文地址:https://blog.csdn.net/qq382495414/article/details/116303205?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474933716800184119697%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474933716800184119697&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-28-116303205-null-null.142^v87^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96