Шаблон проектирования «Simple Factory» | OTUS

Шаблон проектирования «Simple Factory»

В объектно-ориентированном программировании фабрика — это объект, предназначенный для создания других объектов. По сути, фабрика представляет собой функцию либо метод, возвращающий объекты изменяющегося прототипа либо класса из некоторого вызова метода, определяемого, как «новый». Так как определение получилось довольно сложным, давайте приведём пример из жизни.

Допустим, вы хотите построить дом, соответственно, вам нужны двери. Вы же не будете каждый раз, когда нужна дверь, перевоплощаться в столяра и начинать делать дверь — лучше всего заказать её на фабрике. Говоря проще, Simple Factory генерирует экземпляр для клиента, не раскрывая при этом никакой логики.

Посмотрим, как это выглядит в коде. Мы имеем интерфейс Door и его реализацию:

interface Door
{
    public function getWidth(): float;
    public function getHeight(): float;
}

class WoodenDoor implements Door
{
    protected $width;
    protected $height;

    public function __construct(float $width, float $height)
    {
        $this->width = $width;
        $this->height = $height;
    }

    public function getWidth(): float
    {
        return $this->width;
    }

    public function getHeight(): float
    {
        return $this->height;
    }
}

Также у нас есть DoorFactory, делающая дверь и возвращающая её:

class DoorFactory
{
    public static function makeDoor($width, $height): Door
    {
        return new WoodenDoor($width, $height);
    }
}

И теперь мы можем всё это использовать:

$door = DoorFactory::makeDoor(100, 200);
echo 'Width: ' . $door->getWidth();
echo 'Height: ' . $door->getHeight();

Когда применяют паттерн Simple Factory?

Simple Factory используют, когда создание объекта представляет собой не просто несколько присвоений, а какую-нибудь логику — именно тогда есть смысл создать отдельную фабрику вместо того, чтобы везде повторять один и тот же код. Кстати, если интересует пример использования этого шаблона проектирования на языке Java, вам сюда.

По материалам статьи «Design Patterns for Humans».

Другие заметки по этой теме: - Шаблон проектирования «Фабричный метод» (Fabric Method)

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто