`

重构:Replace Conditional with Polymorphism

 
阅读更多

You have a conditional that chooses different behavior depending on the type of an object.
Move each leg of the conditional to an overriding method in a subclass. Make the original method
abstract.

当有条件句,它根据对象类型来选择不同的行为,这时就可以将条件句的每一个分支搬移到子类的覆盖方法中来实现。

 


假设这是原始代码:

class Employee...
    int payAmount() {
        switch (getType()) {
            case EmployeeType.ENGINEER:
                return _monthlySalary;
            case EmployeeType.SALESMAN:
                return _monthlySalary + _commission;
            case EmployeeType.MANAGER:
                return _monthlySalary + _bonus;
            default:
                throw new RuntimeException("Incorrect Employee");
    }
}

int getType() {
    return _type.getTypeCode();
}

private EmployeeType _type;

abstract class EmployeeType...
    abstract int getTypeCode();

class Engineer extends EmployeeType...
    int getTypeCode() {
        return Employee.ENGINEER;
    }

... and other subclasses

 

                                  
                                          

 

After using Replace Conditional with Polymorphism:

 

// client
class Employee...
    int payAmount() {
        return _type.payAmount(this);
    }

// interface
class EmployeeType...
    abstract int payAmount(Employee emp);

// some concrete classes
class Engineer...
    int payAmount(Employee emp) {
        return emp.getMonthlySalary();
    }

class Salesman...
    int payAmount(Employee emp) {
        return emp.getMonthlySalary() + emp.getCommission();
    }

class Manager...
    int payAmount(Employee emp) {
        return emp.getMonthlySalary() + emp.getBonus();
    }
 

 

 

 

 

  • 大小: 34.7 KB
  • 大小: 2.1 KB
分享到:
评论

相关推荐

    重构例子:ReplaceConditionalWithPolyMorphism

    "Replace Conditional With Polymorphism"(用多态替换条件语句)是马丁·福勒在其经典著作《重构:改善既有代码的设计》中提出的一种重构模式。这个模式的目标是消除条件判断,通过引入多态性来提升代码的清晰度和...

    重构:改善既有代码的设计.[美]Martin Fowler.epub【文字版手机格式】

    9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 9.7 Introduce Null Object(引入Null对象) 9.8 Introduce Assertion(引入断言) 第10章 简化函数调用 10.1 Rename Method(函数改名) 10.2 Add...

    重构:改善既有代码的设计 [重点整理版]

    - **替换条件语句与多态(Replace Conditional with Polymorphism)**:使用多态性替代条件语句,提高代码的灵活性。 #### 三、总结 重构是提升代码质量和可维护性的关键过程。通过对现有代码进行有目的的改进,...

    重构-改善既有代码的设计(中文版)

     Replace Conditional with Polymorphism 用多态代替条件语句   Introduce Null Object 引入Null对象   Introduce Assertion 引入断言  Chapter 10:Making Method Calls Simpler 简化方法调用   Rename ...

    重构-改善既有代码的设计+中文版

     Replace Conditional with Polymorphism 用多态代替条件语句   Introduce Null Object 引入Null对象   Introduce Assertion 引入断言  Chapter 10:Making Method Calls Simpler 简化方法调用   Rename ...

    重构 改善既有代码的设计

     Replace Conditional with Polymorphism 用多态代替条件语句   Introduce Null Object 引入Null对象   Introduce Assertion 引入断言  Chapter 10:Making Method Calls Simpler 简化方法调用   Rename...

    重构——改善既有代码的设计

     Replace Conditional with Polymorphism 用多态代替条件语句   Introduce Null Object 引入Null对象   Introduce Assertion 引入断言  Chapter 10:Making Method Calls Simpler 简化方法调用   Rename ...

    重构,改善既有代码的设计

     Replace Conditional with Polymorphism 用多态代替条件语句   Introduce Null Object 引入Null对象   Introduce Assertion 引入断言  Chapter 10:Making Method Calls Simpler 简化方法调用   Rename...

    重构-改善既有代码的设计

    9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 255 9.7 Introduce Null Object(引入Null对象) 260 9.8 Introduce Assertion(引入断言) 267 第10章 简化函数调用 271 10.1 Rename...

    重构-改善既有代码的设计 中文版

    9.6 Replace Conditional with Polymorphism(以多态取代条件式) 9.7 Introduce Null Object(引入Null对象) 9.8 Introduce Assertion(引入断言) 第10章 简化函数呼叫 10.1 Rename Method(重新命名函数) 10.2 ...

    31天 重构速成 pdf

    4. **多级条件语句转换为多态(Replace Conditional with Polymorphism)**:如果在一个方法中有复杂的条件判断逻辑,可以考虑使用面向对象的多态特性来简化代码。 ### 如何快速提升重构能力 1. **学习重构模式**...

    构改善既有代码的设计

    2. **重构策略与技术**:马丁·福勒提出了一系列具体的重构手法,如提取方法(Extract Method)、提取类(Extract Class)、替换条件为命令(Replace Conditional with Polymorphism)等。这些手法提供了改善代码...

    重构改善既有代码的设计(PDF)

    6. 用多态代替条件表达式(Replace Conditional with Polymorphism):当需要使用条件表达式(如if-else或switch)来决定具体的行为时,可以考虑使用多态来代替。这样做可以使行为更加灵活,易于扩展和维护。 7. ...

    重构_改善既有代码的设计[高清版].pdf

    - **多态替换条件表达式(Replace Conditional with Polymorphism)**:使用继承和多态性来替换复杂的条件语句。 #### Java开发中的重构实践 - **IDE支持**:现代的集成开发环境(如IntelliJ IDEA或Eclipse)提供了...

    重构-改善既有代码的设计.rar

    3. **替换条件为函数(Replace Conditional with Polymorphism)**:通过多态性来取代复杂的条件语句,使代码更易于理解和维护。 4. **将类拆分为子类(Split Class)**:如果一个类承担过多职责,可以将其拆分成多...

Global site tag (gtag.js) - Google Analytics