Какой паттерн для этого подойдёт? Здравствуйте, не могу решить какой паттерн будет для этого самый удобный.
Как связать несколько классов в одном? Имеем несколько классов 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
198 +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 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир