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

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

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

Интерфейс GameObject(){ }
класс Ship реализует GameObject {}
класс Station реализует GameObject {}
класс Commet реализует 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 😃.

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *