Методы рефакторинга кода. Замена условного оператора полиморфизмом.
- Чтобы заменить условный оператор полиморфизмом, нужно выполнить следующие шаги:
- Определите различные ветви условного оператора и действия, которые выполняются в каждой ветви. Эти действия станут методами в ваших полиморфных классах.
- Создайте абстрактный базовый класс с абстрактным методом для каждого действия, определенного в шаге 1. Абстрактный метод должен иметь то же имя и тип возвращения, что и действие, которое он представляет.
- Создайте конкретный подкласс для каждой ветви условного оператора и реализуйте абстрактные методы с помощью действий из соответствующей ветви условного оператора.
- Замените условный оператор объектом соответствующего конкретного подкласса.

Пример изпользования метода
Рассмотрим следующий код, который использует условный оператор:
// До рефакторинга:
int getDiscount(ProductType type) {
if (type == ProductType.STANDARD) {
return 0;
} else if (type == ProductType.SALE) {
return 10;
} else if (type == ProductType.PREMIUM) {
return 20;
}
}
// После рефакторинга:
interface Product {
int getDiscount();
}
class StandardProduct implements Product {
@Override
public int getDiscount() {
return 0;
}
}
class SaleProduct implements Product {
@Override
public int getDiscount() {
return 10;
}
}
class PremiumProduct implements Product {
@Override
public int getDiscount() {
return 20;
}
}
int getDiscount(Product product) {
return product.getDiscount();
}