Шаблон проектирования «Simple Factory» | OTUS
🔥 Начинаем BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Node.js Developer
-25%
Unity Game Developer. Professional
-25%
React.js Developer
-25%
Android Developer. Professional
-25%
Software Architect
-25%
C++ Developer. Professional
-25%
Backend-разработчик на PHP Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Team Lead Разработчик голосовых ассистентов и чат-ботов Архитектура и шаблоны проектирования Agile Project Manager Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Подготовка к сертификации Oracle Java Programmer (OCAJP) Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «ELK»
-16%
Супер-интенсив «IaC Ansible»
-16%
Administrator Linux. Professional MS SQL Server Developer Безопасность Linux PostgreSQL Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Administrator Linux.Basic Супер-интенсив "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 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!