zoukankan      html  css  js  c++  java
  • 重构31-Replace conditional with Polymorphism(多态代替条件)

    多态(Polymorphism)是面向对象编程的基本概念之一。在这里,是指在进行类型检查和执行某些类型操作时,最好将算法封装在类中,并且使用多态来对代码中的调用进行抽象。
    public class OrderProcessor {
    public Double ProcessOrder(Customer customer, List<Product> products) {
    // do some processing of order
    Double orderTotal = sum(products);
    Type customerType = customer.GetType();
    if (customerType == typeof(Employee)) {
    orderTotal -= orderTotal * 0.15d;
    } else if (customerType == typeof(NonEmployee)) {
    orderTotal -= orderTotal * 0.05d;
    }
    return orderTotal;
    }
    }
    如你所见,我们没有利用已有的继承层次进行计算,而是使用了违反SRP原则的执行方式。要进行重构,我们只需将百分率的计算置于实际的customer类型之中。我知道这只是一项补救措施,但我还是会这么做,就像在代码中那样
    public abstract class Customer {
    }

    public class Employee extends Customer {
    }

    public class NonEmployee extends Customer {
    }

    public abstract class Customer {
    public abstract Double DiscountPercentage(){
    return null;
    }
    }
    public class Employee extends Customer {
    @Override
    public Double DiscountPercentage(){
    return 0.15d;
    }
    }
    public class NonEmployee extends Customer {
    @Override
    public Double DiscountPercentage(){
    return 0.05d;
    }
    }
    public class OrderProcessor {
    public Double ProcessOrder(Customer customer, List<Product> products) { // do some processing of order
    Double orderTotal = sum(products);
    orderTotal -= orderTotal * customer.DiscountPercentage();
    return orderTotal;
    }
    }







  • 相关阅读:
    LINQ To SQL: Eager Loading
    返回JSon格式数据
    Tips
    Easyui的DateBox日期格式化
    jquery treeview 展开指定节点,选中指定节点
    jquery treeview 功能参数
    Javascript 中 ShowModalDialog 的使用方法
    GetDlgItem用法
    20个开源项目托管站点推荐
    DLINQ(十): 分层构架的例子
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786509.html
Copyright © 2011-2022 走看看