Создавайте объекты правильно!

Сложность: Начинающий | Легко | Нормальный | Испытывающий

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

Завод

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

Идея этой статьи состоит в том, чтобы охватить и то, и другое.

Зачем нужен завод?

Сложность

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

Отделите использование объекта от его создания

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

Разница между фабричным методом и абстрактной фабрикой

Фабричный метод - это (ну, очевидно) метод, а абстрактная фабрика - это объект. Заводские методы можно переопределить в подклассе. Абстрактная фабрика - это объект, который может иметь несколько фабричных методов.

Шаблон фабричного метода

Заводской протокол вернет новые объекты. В Swift мы обычно кодируем протокол, расширение может обеспечивать реализацию по умолчанию, но обычно будет конкретный экземпляр этой фабрики.

Поскольку мы используем Swift, это переопределение НЕ является тем, чем мы обычно занимаемся. Отмена функции? Я бы не стал, спасибо.

В любом случае вот код. В этом примере мы создадим фабрику для создания Struct, которая просто содержит имя как String:

Абстрактный узор

Это конкретное руководство даст вам определение абстрактного шаблона фабрики.

«Предоставить интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов».

В этом примере мы создадим фабрику для создания Struct, которая просто содержит имя как String:

Пример Factory

Мы можем настроить фабричный метод для инициализации свойства, он живет внутри абстрактной фабрики.

конечно, мы живем в мире Swift, поэтому кодирование протоколов означает, что мы можем заменить фабрику.

Вот код:

поэтому, когда мы решим протестировать, мы можем использовать следующее:

которые затем можно элегантно заменить в тесте:

Фабрика, использующая Enum

Может иметь смысл создать сложный объект, используя довольно приятный Enum Swift. Это не то, что я использовал в продакшене (для URL), поскольку я использую свой собственный URLBuilder для этой функциональности, но это хороший пример использования фабрики в реальном коде!

Заключение

Это используется в моей статье Внедрение зависимостей с помощью раскадровок, и я бы порекомендовал вам серьезно подумать об использовании шаблона фабрики - в проектах Swift он довольно хорошо используется, а также полезен для разговоров о проектах.

Если у вас есть вопросы, комментарии или предложения, пишите мне в Twitter.