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

  • 相关阅读:
    tomcat常见错误及解决方案
    MySQL 5.6 for Windows 解压缩版配置安装
    win7 cmd 操作mysql数据库
    @Responsebody与@RequestBody
    ajax常用参数
    JSP和servlet有什么区别?
    面试 小总结
    cocoapods导入三方库头文件找不到问题
    git笔记
    iOS裁剪,缩放图片白边问题解决办法
  • 原文地址:https://www.cnblogs.com/changeCode/p/11000452.html
Copyright © 2011-2022 走看看