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

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

 Abstract Factory

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

Итак, что же делает абстрактная фабрика: Абстрактная фабрика дает простой интерфейс для создания объектов которые принадлежат к тому или иному сеймейству объектов.

Отличия от фабричного метода:

  1. Фабричный метод порождает объекты одного и того же типа, Абстрактная фабрика же может создавать независимые объекты
  2. Чтобы добавить новый тип объекта–надо поменять интерфейс фабрики, в фабричном же методе легко просто поменять внутренности метода, который ответственный за порождение объектов.

Давайте представим ситуацию: у нас есть две фабрики по производству iPhone и iPad. Одна оригинальная, компании Apple, другая – хижина дядюшки Хуа. И вот, мы хотим производить эти товары: если в страны 3-го мира – то товар от дядюшки, в другие страны – товар любезно предоставлен компанией Apple.

Итак, пускай у нас есть фабрика, которая умеет производить и айпады и айфоны:

Естественно, нам необходимо реализовать продукты, которые фабрика будет производить:

Но, продукты немного отличаются. Пускай у нас есть два типа продуктов, оригинальные Apple и продукты которые произведены трудолюбивым дядюшкой Сяо-Ляо:

Разные телефоны, конечно же, производятся на различных фабриках, потому мы просто обязанны их создать! Приблизительно так должны выглядеть фабрика Apple:

Конечно же у нашего китайского дядюшки тоже есть своя фабрика:

Как видим, фабрики одинаковые, а вот девайсы у них получаются разные.

Ну вот собственно и все, мы приготовили все что надо для демонстрации! Теперь, давайте напишем небольшой метод который будет возвращать нам фабрику которую мы хотим (кстати, тут фабричный метод таки будет):

Теперь меняя значение переменной isThirdWorld можно получать те или иные девайсы.

Ну и проверим что мы там понаписали…

Консоль:

Итак:

Паттерн Абстрактная фабрика используется для обеспечения клиента набором родственных или зависимых объектов. «Семья» объектов, созданных на заводе-изготовителе определяются во время выполнения.

В зависимости от типа числа, переданного в NumberHelper, мы получаем функцию make соответствующего класса. Т.е. переменная factoryOne равна функции make класса NexStepNumber. Мы в эту функцию передаем строку «1», внутри функции идет преобразование и  в консоль уже выводится строковые представление, полученное методом stringValue(): в консоле получаем строку «1».

Соответсвенно в factoryTwo мы имеем функцию make класса SwiftNumber, передаем в нее строку «2». После преобразований имеем на выходе в консоле строковое представление «2».


В следующей статье

Метки:

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

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

*