Внешний вид сайта:

Замена условия полиморфизмом

Полезность страницы:
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”)’
 
}

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

Дополнить страницу Вы можете помочь другим людям дополнив эту страницу вашими знаниями по данному вопросу!
09:47

Комментарии

Нет комментариев. Ваш будет первым!