zoukankan      html  css  js  c++  java
  • 重构13-Extract Method Object(提取方法对象)

    重构来自于Martin Fowler的重构目录。你可以在这里找到包含简介的原始文章。 
    在我看来,这是一个比较罕见的重构,但有时却终能派上用场。当你尝试进行提取方法的重构时,需要引入大量的方法。在一个方法中使用众多的本地变量有时会使代码变得丑陋。因此最好使用提取方法对象这个重构,将执行任务的逻辑分开

    public class OrderLineItem {
    public Double Price;
    }
    public class Order {
    private List<OrderLineItem> OrderLineItems;
    private List<Double> Discounts;
    private Double Tax;
    public Double Calculate() {
    Double subTotal = 0d;
    // Total up line items
    for(OrderLineItem lineItem : OrderLineItems) {
    subTotal += lineItem.Price;
    }
    // Subtract Discounts
    for(Double discount : Discounts) subTotal -= discount;
    // Calculate Tax
    Double tax = subTotal * Tax;
    // Calculate GrandTotal
    Double grandTotal = subTotal + tax;
    return grandTotal;
    }
    }
    我们通过构造函数,将返回计算结果的类的引用传递给包含多个计算方法的新建对象,或者向方法对象的构造函数中单独传递各个参数。如下面的代码:

    public class OrderLineItem{
    public Double Price;
    }

    public class Order {
    public List<OrderLineItem> OrderLineItems;
    public List<Double> Discounts;
    public Double Tax;
    public Double Calculate() {
    return new OrderCalculator(this).Calculate();
    }
    }

    public class OrderCalculator {
    private Double SubTotal;
    private List<OrderLineItem> OrderLineItems;
    private List<Double> Discounts;
    private Double Tax;

    public OrderCalculator(Order order) {
    OrderLineItems = order.OrderLineItems;
    Discounts = order.Discounts;
    Tax = order.Tax;
    }

    public Double Calculate() {
    CalculateSubTotal();
    SubtractDiscounts();
    CalculateTax();
    return SubTotal;
    }

    private void CalculateSubTotal() {
    // Total up line items
    for(OrderLineItem lineItem : OrderLineItems) SubTotal += lineItem.Price;
    }
    private void SubtractDiscounts() {
    // Subtract Discounts
    for(Double discount : Discounts) SubTotal -= discount;
    }
    private void CalculateTax() {
    // Calculate Tax
    SubTotal += SubTotal * Tax;
    }
    }
     





  • 相关阅读:
    mysql主从配置
    前台使用复杂json
    eclipse打包非web项目的整合了spring和mybaits的pom项目,打包可以运行的jar
    Select
    sqlcmd踩坑笔记(环境Ubuntu18.04)
    等待
    戴锦华访谈:小鲜肉 大女主 腐文化的流行 当代女性的生存现状和困境
    CREATE
    语法约定和标识符
    SQL Server应用目录
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786329.html
Copyright © 2011-2022 走看看