Шаблоны программирования на Swift: Factory

Продолжаем изучать шаблоны программирования или шаблоны проектирования на языке Swift на реальных примерах. В предыдущей статье Шаблоны программирования на Swift: Prototype мы рассмотрели шаблон Prototype, а в данной статье мы будем разбираться с шаблоном Фабрика — Factory

Factory Method.

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

Когда использовать:

1. Мы не до конца уверены объект какого типа нам необходим.
2. Мы хотим чтобы не родительский объект решал какой тип создавать, а его наследники.

Почему хорошо использовать:

Объекты созданные фабричным методом – схожи, потому как у них один и тот же родительский объект. Потому, если локализировать создание таких объектов, то можно добавлять новые типы, не меняя при это код который использует фабричный метод.

Пример:

Давайте представим, что мы такой неправильный магазин в котором тип товара оценивается по цене:) На данный момент товар есть 2х типов – Игрушки и Машины.

В чеке мы получаем только цены, и нам надо сохранить объекты которые куплены.

Для начала создадим клас Product. Его реализация нас особо не интересует, хотя он может содержать в себе общие для разных типов товаров методы (сделано для примера, мы их особо не используем):

Создадим два наследника

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

Для проверки работы будем использовать метод, который использует ProductGenerator и выведем в лог продукты, которые создала наша фабрика:

Лог в консоле:

Итак, шаблон проектирования Фабрика,  или Factory используется для замены конструктора класса, абстрагируя процесс генерации объекта так, чтобы тип экземпляра мог быть определен во время выполнения программы.

И реальный пример использования шаблона проектирования Factory

Т.к. в фабрике мы не обрабатывали страну UK фабрика не вернет валюту для этой страны. Соответсвенно лог будет выглядеть так:

Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*