Шаблон проектирования «Simple Factory» | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
C++ Developer. Professional
-5%
Scala-разработчик
-8%
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Golang Developer. Professional
-5%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional Web-разработчик на Python MS SQL Server Developer Android Developer. Basic Разработчик программных роботов (RPA) на базе UiPath и PIX Microservice Architecture Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов React.js Developer Node.js Developer Интенсив «Оптимизация в Java» Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Инфраструктурная платформа на основе Kubernetes
-6%
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Экcпресс-курс «ELK»
-10%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Базы данных Network engineer Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Шаблон проектирования «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 комментариев
Для комментирования необходимо авторизоваться