Автор оригинала: 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”