zoukankan      html  css  js  c++  java
  • 重构手法(一)之重新组织函数

    1、Extract Method(提炼函数)

    重构前:

    void printOwing(double amount){
        printBanner();
    
        //print details        
        System.out.println("name:" + _name);
        System.out.println("amount" + amount);
    }

    重构后:

    void printOwing(double amount){
        printBanner();
        printDetails(amount);
    }
    
    void printDetails(double amount){
        System.out.println("name:" + _name);
        System.out.println("amount" + amount);    
    }

    2、Inline Method(内联函数)

    重构前:

    int getRating(){
        return (moreThanFiveLateDeliveries()) ? 2 : 1;    
    }
    
    boolean moreThanFiveLateDeliveries(){
        return _numberOfLateDeliveries > 5;
    }

    重构后

    int getRating(){
        return (_numberOfLateDeliveries > 5) ? 2 : 1;
    }

    3、Inline Temp(内联临时变量)

    重构前:

    double basePrice = anOrder.basePrice();
    return (basePrice > 1000);

    重构后:

    return (anOrder.basePrice() > 1000);

    4、Replace Temp with Query(以查询取代临时变量)

    重构前:

    double basePrice = _quantity * _itemPrice;
    if(basePrice > 1000)
        return basePrice * 0.95;
    else
        return basePrice * 0.98;

    重构后:

    if(basePrice() > 1000)
        return basePrice() * 0.95;
    else
        return basePrice() * 0.98;
    
    double basePrice(){
        return _quantity * _itemPrice;    
    }

    5、Introduce Explaining Variable(引入解释性变量)

    重构前:

    if((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0)
    {
        //do something
    }

    重构后:

    final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
    final boolean isIEBrowser = browser.toUpperCase().indexOf("IE) > -1;
    final boolean wasResized = resize > 0;
    
    if(isMacOs && isIEBrowser && wasInitialized() && wasResized){
        //do something
    }

    6、Split Temporary Variable(分解临时变量)

    重构前:

    double temp = 2 * (_height + _width);
    System.out.println(temp);
    temp = _height * _width;
    System.out.println(temp);

    重构后:

    final double perimeter = 2 * (_height + _width);
    System.out.println(perimeter);
    final double area = _height * _width;
    System.out.println(area);

    7、Remove Assignments to Parameters(移除对参数的赋值)

    重构前:

    int discount(int inputVal, int quantity, int yearToDate){
        if(inputVal > 50)
            inputVal -= 2;    
    }

    重构后:

    int discount(int inputVal, int quantity, int yearToDate){
        int result = inputVal;
        if(inputVal > 50)
            result -= 2;
    }

    8、Replace Method with Method Object(以函数对象取代函数)

    9、Substitute Algorithm(替换算法)

    重构前:

    String foundPerson(String[] people){
        for(int i = 0; i < people.length; i++){
            if(people[i].equals("Don")){
                return "Don";
            }      
            if(people[i].equals("John")){
                return "John";
            }  
            if(people[i].equals("Kent")){
                return "Kent";
            } 
        }
        return "";
    }

    重构后:

    String foundPerson(String[] people){
        List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"});
        for(int i = 0; i < people.length; i++){
            if(candidates.contains(people[i]))
                return people[i];
        }  
        return "";
    }
  • 相关阅读:
    封装缓动动画函数
    封装动画函数-匀速运动
    实现产品图片的放大镜效果:
    仿淘宝侧边栏滚动案例:
    页面被卷去的头部兼容性解决方案
    简单发送短信倒计时案例
    Echarts 版本的那些坑
    json变量作键名
    媒体查询那些事儿
    mac 强制关闭指定端口
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5162929.html
Copyright © 2011-2022 走看看