Замена условия полиморфизмом
Полезность страницы:
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”)’ }
Наибольшее преимущество этот рефакторинг приносит при большом количестве операторов выбора, зависящих от типа объекта. При добавлении нового типа нужно найти все эти операторы и изменить их. При выполненном же рефакторинге надо всего лишь дописать новый класс, соответствующим образом определив его поведение, причем клиентам исходного класса нет дела до его подклассов, что уменьшает количество связей в системе.
Комментарии