Какой шаблон лучше подходит для избавления от множества if? Привет
В программе есть куча обьектов различных классов (самолеты, катера, вертолеты, танки, машины, грузовики), которые подключают различные
интерфейсы (ехать, лететь, стрелять, перевозить). Соответсвенно в коде надо использовать кучу условий чтобы понять что за обьекто
и какой метод можно вызвать:foreach($vehicles as $vehicle) {
switch($vehicle->type)
{
case 'car':
$vehicle->move();
$vehicle->closeDoor();
break;
case 'ship':
$vehicle->move();
$vehicle->swim();
break;
case 'airplane':
$vehicle->fly();
$vehicle->landing();
break;
case 'tank':
$vehicle->move();
$vehicle->stop();
$vehicle->fire();
break;
}
$vehicle->stop();
}
Не могу понять какую лучше использовать технику чтобы избавится от кучи if в программе ? тк методы у обьекта могут быть разные полиморфизм не подходит, надо точно знать
обьект какого класса используется.

21 Авг 2019 в 07:01
188 +1
0
Ответы
1

Для избавления от множества if-ов в данном случае можно применить паттерн "Стратегия" (Strategy).

Суть этого паттерна заключается в том, что каждый тип вида перевозки (автомобиль, корабль, самолет, танк и т.д.) имеет свой собственный класс, реализующий один интерфейс, например, интерфейс "TransportStrategy". В этом интерфейсе есть методы, общие для всех видов транспорта, например, move(), stop(), fire(), swim() и т.д.

Каждый класс транспорта (автомобиль, корабль, самолет, танк и т.д.) реализует свою конкретную стратегию этих методов. Например, у класса "Car" метод move() будет реализован для езды по дороге, у класса "Ship" метод move() будет реализован для плавания по воде и т.д.

Теперь в вашем коде можно использовать этот паттерн следующим образом:

foreach($vehicles as $vehicle) {
$strategy = new TransportStrategyFactory($vehicle);
$strategy->move();
$strategy->stop();
$strategy->executeSpecificAction();
}

Таким образом, при добавлении новых классов транспорта и методов, вам не придется изменять большое количество if-ов, а просто добавить новую конкретную стратегию в соответствующем классе.

Этот подход также позволяет легко тестировать каждый класс транспорта отдельно и обеспечивает гибкость и расширяемость вашей системы.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир