Методы рефакторинга кода. Замена условного оператора полиморфизмом.

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

 

 

 

 

 

 

 

Programming

Пример изпользования метода

Рассмотрим следующий код, который использует условный оператор:

// До рефакторинга:

  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();
  }