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;
    }
    }







  • 相关阅读:
    构建前端第8篇之---Webstom搭建ES6运行环境
    方法重写
    继承的成员变量的访问特定
    继承的理解
    总结与新的开始
    python 小案例demo07
    python 小案例demo06
    python 小案例demo05
    python 小案例demo05 升级版石头剪刀布
    python 小案例demo04
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786509.html
Copyright © 2011-2022 走看看