Замена условия полиморфизмом
Полезность страницы:
     
    
    0/100      
    
 
        
      
Есть условие, зависящее от типа объекта, по которому выбирается соответствующие поведение.
Поместить каждую ветвь условного оператора в перегруженный метод в подклассе. Сделать исходный метод абстрактным.
double getSpeed() {
switch (_type) {
case EUROPEAN:
return getBaseSpeed();
case AFRICAN:
return getBaseSpeed() – getLoadFactor() * _numberOfCoconuts;
caseNORWEGIAN_BLUE:
return (_isNailed) ? 0 : getBaseSpeed(_voltage);
}
throw new RunTimeException (“Should be unreachable”)’
}

Наибольшее преимущество этот рефакторинг приносит при большом количестве операторов выбора, зависящих от типа объекта. При добавлении нового типа нужно найти все эти операторы и изменить их. При выполненном же рефакторинге надо всего лишь дописать новый класс, соответствующим образом определив его поведение, причем клиентам исходного класса нет дела до его подклассов, что уменьшает количество связей в системе.
Комментарии