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就行了 业务逻辑是不需要修改的!

  • 相关阅读:
    地图篇-02.地理编码
    地图篇-01.获取用户位置
    新手教程之使用Xib自定义UITableViewCell
    封装
    NSDate简单介绍
    OC知识点归纳
    Xcode的控制台调试命令
    [开发笔记]UIApplication介绍
    技术分享-开发利器block底层实现
    技术分享-开发利器block
  • 原文地址:https://www.cnblogs.com/changeCode/p/11000452.html
Copyright © 2011-2022 走看看