zoukankan      html  css  js  c++  java
  • 重构22-Break Method(重构方法)

    这个重构是一种元重构(meta-refactoring),它只是不停地使用提取方法重构,直到将一个大的方法分解成若干个小的方法。下面的例子有点做作,AcceptPayment方法没有丰富的功能。因此为了使其更接近真实场景,我们只能假设该方法中包含了其他大量的辅助代码。 下面的AcceptPayment方法可以被划分为多个单独的方法。

    public class CashRegister {
    public CashRegister() {
    Tax = 0.06d;
    }
    private Double Tax;
    public void AcceptPayment(Customer customer, List<Product> products,Double payment) {
    Double subTotal = 0d;
    for(Product product : products) {
    subTotal += product.Price;
    }
    for(Product product : products) {
    subTotal -= product.AvailableDiscounts;
    }
    Double grandTotal = subTotal * Tax;
    customer.DeductFromAccountBalance(grandTotal);
    }
    }
    public class Customer {
    public void DeductFromAccountBalance(Double amount) {
    // deduct from balance
    }
    }
    public class Product {
    public Double Price;
    public Double AvailableDiscounts;
    }
    如您所见,AcceptPayment方法包含多个功能,可以被分解为多个子方法。因此我们
    多次使用提取方法重构,结果如下: 
    public class CashRegister {
    public CashRegister() {
    Tax = 0.06d;
    }
    private Double Tax;
    private List<Product> Products;
    public void AcceptPayment(Customer customer, List<Product> products, Double payment) {
    Double subTotal = CalculateSubtotal();
    subTotal = SubtractDiscounts(subTotal);
    Double grandTotal = AddTax(subTotal);
    SubtractFromCustomerBalance(customer, grandTotal);
    }
    private void SubtractFromCustomerBalance(Customer customer, Double grandTotal) {
    customer.DeductFromAccountBalance(grandTotal);
    }
    private Double AddTax(Double subTotal) {
    return subTotal * Tax;
    }
    private Double SubtractDiscounts(Double subTotal) {
    for(Product product : Products){
    subTotal -= product.AvailableDiscounts;
    }
    return subTotal;
    }
    private Double CalculateSubtotal() {
    Double subTotal = 0d;
    for(Product product : Products){
    subTotal += product.Price;
    }
    return subTotal;
    }
    }
    public class Customer {
    public void DeductFromAccountBalance(Double amount) {
    // deduct from balance
    }
    }
    public class Product {
    public Double Price;
    public Double AvailableDiscounts;
    }
     
     





  • 相关阅读:
    eclipse的优化 gc.log
    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
    JVM系列三:JVM参数设置、分析
    热加载
    彻底理解JAVA动态代理
    Linux下查看Web服务器当前的并发连接数和TCP连接状态
    个人博客 V0.0.3 版本 ...
    HTML5本地存储——IndexedDB(一:基本使用)
    如何在Blog中加入Google Analytics
    webpack中实现按需加载
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786361.html
Copyright © 2011-2022 走看看