如何优化一个丑陋的switch语句!

相信大家在平时的工作中都写过那种令人崩溃的switch分支语句,也许你已经对代码进行了优化,比如每一个分支都写成一个函数,最后呈现出来的结果大概是这个样子

 public  int calculatePay(User user){
        
        switch(user.type){
            case A:
                return methodA();
                
            case B:
                return methodB();
            case C:
                return methodC();
        }
        
    }

虽然不想承认,但是我在之前的程序中就是这么写的,有人会问,这么写有问题吗?其实没有什么问题,但是我们还可以将代码写的更加的优美一点,而且假设还有类似的方法,例如。 calculateBill(User user) 等等的话 都要这么麻烦吗?而且这个也明显不符合开放闭合原则,一旦出现新的类型,就不得不修改所有方法的代码!!

那么如何修改呢?解决方法是将switch语句给深埋到抽象工厂下面,不让别人看到,该工厂使用switch语句为User创建适当的实现类,而具体的方法,比如calculatePay以及  calculateBill等 则通过User接口多态的接受派遣,最后的代码呈现为,至于具体的好处就自己慢慢体会吧!!!!

 

public abstract class User{



      public. abstract. int  calculatePay();


      public  abstract  int  calculateBill();  

}

public interface UserFactory{
        
    public User getUser(UserType u);

}    


public class UserFactoryImpl implements UserFactory{

       public User. getUser(UserType u){

               switch(u.type){

                  case A:

                     return UserA;

                  case B:
                     return UserB;
                  
                  case C:
                      return UserC;

             }
       }  

}            

以后有增加新的类型的时候,只需要新增加一个实现类UserD,UserE就行了 业务逻辑是不需要修改的!

 

posted on 2019-06-10 21:36  敲代马  阅读(334)  评论(0编辑  收藏  举报

导航