TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.64K subscribers
Post #279 1.15K
🔢 Паттерны проектирования в Swift: Абстрактная фабрика.

Привет! Сегодня разберем паттерн Abstract Factory (Абстрактная фабрика) - мощный инструмент для создания семейств связанных объектов без привязки к конкретным типам.


Зачем это нужно:

Представьте, что вы разрабатываете приложение, которое должно работать с разными темами оформления (светлая/темная) или разными базами данных (SQLite/Realm). Abstract Factory позволяет создавать согласованные наборы объектов, которые гарантированно работают вместе.


Как это работает в Swift:

В отличие от Java/C++, в Swift нет абстрактных классов. Но мы можем использовать протоколы для той же цели.

Пример:

Абстрактные товары:

protocol Coffee {
func brew()
}

protocol Tea {
func steep()
}


Конкретные товары:

// Для итальянской кофейни
struct Espresso: Coffee {
func brew() {
print("Варим эспрессо")
}
}

struct ItalianTea: Tea {
func steep() {
print("Завариваем итальянский травяной чай")
}
}

// Для английской кофейни
struct Cappuccino: Coffee {
func brew() {
print("Готовим капучино")
}
}

struct EnglishTea: Tea {
func steep() {
print("Завариваем английский черный чай")
}
}


Абстрактная фабрика:

protocol CafeFactory {
func makeCoffee() -> Coffee
func makeTea() -> Tea
}


Конкретные фабрики:

struct ItalianCafeFactory: CafeFactory {
func makeCoffee() -> Coffee {
Espresso()
}

func makeTea() -> Tea {
ItalianTea()
}
}

struct EnglishCafeFactory: CafeFactory {
func makeCoffee() -> Coffee {
Cappuccino()
}

func makeTea() -> Tea {
EnglishTea()
}
}


Использование фабрики:

final class CafeOrder {
private let factory: CafeFactory

init(factory: CafeFactory) {
self.factory = factory
}

func prepareCoffeeOrder() {
let coffee = factory.makeCoffee()
coffee.brew()
}

func prepareTeaOrder() {
let tea = factory.makeTea()
tea.steep()
}
}

let italianOrder = CafeOrder(factory: ItalianCafeFactory())
italianOrder.prepareCoffeeOrder()
italianOrder.prepareTeaOrder()

let englishOrder = CafeOrder(factory: EnglishCafeFactory())
englishOrder.prepareCoffeeOrder()
englishOrder.prepareTeaOrder()



Преимущества:

🔹 Изоляция кода от конкретных классов.
🔹 Гарантия согласованности объектов.
🔹 Легкое добавление новых вариаций.
🔹 Упрощение тестирования.


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

🔹 Если у вас только один вариант продуктов.
🔹 Когда семейства объектов часто меняются.
🔹 В простых приложениях без сложной архитектуры.


💡 Вывод:

Abstract Factory - отличный выбор для сложных приложений, где важна согласованность и гибкость архитектуры. Главное преимущество: способность легко добавлять новые семейства объектов без изменения существующего кода.


➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 6
  • ❤ 2
More from @hardworkerit
  1. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  2. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  3. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  4. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  5. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
  6. Sep 25, 2026🔢 Приватные свойства больше не ломают memberwise инициализатор в Swift 6.4 Swift автомати…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →