TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.65K subscribers
Post #140 999
🔢 Паттерны проектирования в Swift: Стратегия.

Привет, друзья! Сегодня разберём Strategy — мощный паттерн, который позволяет менять поведение объекта на лету без тонны условных выражений if/else.


⚠️ Суть паттерна:

🔸 Выносим разные алгоритмы в отдельные классы.
🔸 Основной объект делегирует работу этим алгоритмам.
🔸 Можно подменять логику прямо во время выполнения.
🔸 Зависим от протокола, а не от конкретного класса.


♣️ Пример:

Допустим, у нас есть персонаж, который может:
🔹 Ходить.
🔹 Бегать.
🔹 Летать.

Вместо простой реализации:


enum Movement {
case walk, run, fly
}

class Character {
func move(type: Movement) {
switch type {
case .walk: print("Идёт")
case .run: print("Бежит")
case .fly: print("Летит")
}
}
}


Напишем элегантно через Strategy:


protocol MovementStrategy {
func move()
}

class WalkStrategy: MovementStrategy {
func move() { print("Идёт пешком") }
}

class FlyStrategy: MovementStrategy {
func move() { print("Летит на реактивном ранце") }
}

class GameCharacter {
private var strategy: MovementStrategy

init(strategy: MovementStrategy) {
self.strategy = strategy
}

func setStrategy(_ strategy: MovementStrategy) {
self.strategy = strategy
}

func performMove() {
strategy.move()
}
}

// Использование
let hero = GameCharacter(strategy: WalkStrategy())
hero.performMove() // Идёт пешком

hero.setStrategy(FlyStrategy())
hero.performMove() // Летит на реактивном ранце



✅ Плюсы подхода:

🔹 Гибкость: новые стратегии добавляются без изменения основного класса.
🔹 Тестируемость: можно подменять реальные стратегии моками, проверяя логику изолированно.
🔹 Чистый код: нет гигантских switch-блоков.


💡 Вывод:

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


➡️ Подписаться на канал
Мобильный трудоголик
  • 🔥 20
  • ❤ 6
  • 👍 1
More from @hardworkerit
  1. Oct 9, 2026👨‍💻 Умение адаптироваться - важный навык айтишника, который часто недооценивают. В ИТ не…
  2. Oct 8, 2026🈸 Apple обяжет разработчиков поддерживать iPhone Duo. Apple опубликовала требования к при…
  3. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  4. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  5. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  6. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
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 →