用多态取代条件表达式

1,273 阅读1分钟

描述 

如果有一个条件表达式,根据对象类型的不同而选择不同的行为 可以将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数 

double getSpeed(){
    switch (_type){
        case EURAPEAN:
                return getBaseSpeed();
        case AFRICAN:
                return getBaseSpeed() - getLoadFactor() * _numberOfCocounts;
        case NORWEGION_BLUE:
                return (_isNailed) ? 0 : getBasedSpeed(_voltage);
    }
}



动机

如果需要根据对象的不同类型而采取不同的行为,多态使我们可以不用编写明显的条件表达式

正因为有了多态:“类型码的switch语句” 以及“ 基于类型名称的if-else” 语句 在面向对象中很少出现。