Фабричный дизайн Шаблон Объяснение

Нам говорят, что в большинстве тем для объяснения моделей фабрики фабрики необходимы, чтобы отказаться от использования new для создания экземпляров объектов. Вместо этого нам нужно создать фабрики с new, что сделать new для конкретных объектов для нас.

Но почему? В этом случае у нас просто избыточный средний класс.
Например здесь

В моем коде я использую этот способ. Это фабрика? Это правильный путь?

    <?php

abstract class CarAbstract
{

abstract public function makeSignal();

public static function factory($type)
{
switch($type) {
'automobile':
return new AutoCar();
break;
'truck':
return new TruckCar();
break;
}
}
}

class AutoCar extends CarAbstract {

public function makeSignal()
{
return 'beep-beep';
}
}

class TruckCar extends CarAbstract {

public function makeSignal()
{
return 'faa-faa';
}
}

$auto = CarAbstract::factory('automobile');
$truck = CarAbstract::factory('truck');

$auto->makeSignal(); // beep-beep
$truck->makeSignal(); // faa-faa

Постскриптум
Извините за мой английский

-1

Решение

Страница Википедии, на которую вы ссылаетесь, объясняет, почему:

Шаблон проектирования Factory Method решает следующие проблемы:

Как можно создать объект, чтобы подклассы могли переопределить, какой класс создавать?

Как класс может отложить создание экземпляров для подклассов?

Лично наиболее полезная ситуация, с которой я столкнулся в PHP для фабрик, — это реализация библиотек. Это вопрос мнения, но я считаю, что фабрики, как правило, чрезмерны в ядре моих PHP-приложений. Но при написании библиотеки, которая будет использоваться несколькими приложениями, она обеспечивает большую гибкость в предоставлении конкретных реализаций.

Приведенный вами пример будет работать, но это не лучший способ реализации шаблона. Обычно лучше создать конкретный заводской класс, который вы создаете. Или даже лучше интерфейс, который вы затем реализуете. Тогда это полезнее и проще для модульного тестирования.

0

Другие решения

Заводской шаблон полезен, когда фактический тип объекта определяется динамически.

$carType = $_POST['type'];
$cat = CarAbstract::factory($carType);

Это позволяет вам реализовать switch оператор один раз в базовом классе, вместо того, чтобы кодировать его во всех приложениях, которые используют эти классы. И если вы добавите больше подклассов, вы просто обновите этот switch утверждение, вместо того, чтобы найти всех звонящих.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector