Какой паттерн для этого подойдёт? Здравствуйте, не могу решить какой паттерн будет для этого самый удобный.
Как связать несколько классов в одном? Имеем несколько классов Car, Bus, Plane. У всех этих классов есть один метод getItems() (все от одного интерфейса код ниже). Как их связать в одном классе Transport?
Чтобы доступ был так: $carItems = (new Transport)->setTransport('Car')->getItems();
$busItems = (new Transport)->setTransport('Bus')->getItems();
// а также
$carItems = (new Car)->getItems();
$busItems = (new Bus)->getItems();TransportInterfaceinterface TransportInterface
{
public function getItems();
}Carclass Car implements TransportInterface
{
public function getItems()
{
return [];
}
}Busclass Bus implements TransportInterface
{
public function getItems()
{
return [];
}
}Planeclass Plane implements TransportInterface
{
public function getItems()
{
return [];
}
}

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

Для данной задачи подойдет паттерн Фабричный метод (Factory Method).

Вы можете создать класс Transport, который будет содержать метод setTransport() для выбора типа транспорта (Car, Bus, Plane) и возвращать объект нужного класса.

Пример реализации:

class Transport
{
public function setTransport($type)
{
switch($type) {
case 'Car':
return new Car();
case 'Bus':
return new Bus();
case 'Plane':
return new Plane();
default:
return null;
}
}
}
$carItems = (new Transport)->setTransport('Car')->getItems();
$busItems = (new Transport)->setTransport('Bus')->getItems();

Таким образом, вы сможете выбирать тип транспорта и получать его объект, а затем вызывать метод getItems() для получения списка предметов данного транспорта.

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