Рубрики
Без рубрики

Замените условные операторы (IF/ELSE или SWITCH) С Полиморфизмом

Узнайте, как заменить условные операторы с помощью концепции OOPS.

Автор оригинала: Udit Rastogi.

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

Проблема : Основываясь на различных игровых объектах, мы хотим увеличить счет по-разному.

Интерфейс GameObject(){ } класс Корабль реализует GameObject {} класс Станция реализует GameObject {} комментарий класса реализует GameObject {}

Решение с помощью If/else: Итак, чтобы добиться того, что у нас есть класс обработчика, и у нас есть метод увеличения точек, который будет увеличивать различные точки в зависимости от объекта, который мы передадим.

 class Handler
{
     public void increasePoints(GameObject go1)
     {
          if(typeOf(go1)== Ship )
          {
            //increase points by 5
          }
           else if(typeOf(go1)==Station)
          {
             //increase points by 10
          }
           else if(typeOf(go1)==Commet)
          {
            //increase points by 15
          }
     }
}

Мы исправим код примерно так.

Теперь просто подумайте, как только количество объектов будет продолжать увеличиваться, управление этим типом кода станет кошмаром .

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

    Interface GameObject(){ 
        increasePoints(points){};
     }
  class Ship implements GameObject {
        increasePoints(points){
           //increase points by 5
        }
    }
  class Station implements GameObject {
        increasePoints(points){
          //increase points by 10
        }
    }
  class Commet implements GameObject {
      increasePoints(points){
      	//increase points by 15
      }
    }
    class Handler {
       public void increasePoints(GameObject go1) {
           go1.increasePoints(points);
       }
    }

Смотрите, теперь код обработчика настолько упрощен, и вся логика перемещается в соответствующий класс, и нет условия if else .

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

Оригинал: “https://www.codementor.io/@uditrastogi/replace-conditional-statements-if-else-or-switch-with-polymorphism-ryl8mx4ns”