• 如何优化一个丑陋的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就行了 业务逻辑是不需要修改的!

  • 相关阅读:
    使用HttpClient短信网关接口实现手机号验证码注册
    Linux安装nginx、redis(在线安装)
    Linux安装Tomcat(本地安装)
    Linux搭建java运行环境(本地安装)
    Linux的安装注意事项
    Linux的Shell常用命令
    applicationContext.xml的复用(import resource)
    Redis解决Session共享问题(如果开启nginx,实现负载均衡)
    Redis缓存商品查询信息(SpringMVC)
    Spring整合Redis
  • 原文地址:https://www.cnblogs.com/changeCode/p/11000452.html
Copyright © 2020-2023  润新知