iOS.Devs
5.43K subscribers
88 photos
3 videos
1 file
751 links
Всё самое актуальное из мира iOS разработки. По вопросам @suriksarkisyan

При поддержке qonversion.io

Чат: @ios_camp_chat.
Download Telegram
🔀 Паттерн стратегия в Swift

Подготовил перевод статьи про реализацию паттерна стратегия.

В общих чертах #strategy #pattern – шаблон из группы поведенческих паттернов проектирования, который определяет семейство схожих алгоритмов, помещает каждый из них в отдельный класс и позволяет использовать их во время выполнения приложения (в runtime).

Короче говоря: инкапсуляция в классы, переиспользование и возможность менять поведение в runtime.

Сценарии использования

1. Разные способы детать одно и то же;
2. Альтерантива наследованию;
3. Альтерантива ветвлению логики: if/else

Пример
Хотим печатать логи, при этом необходимо иметь возможность использовать разные стили: в верхнем регистре, нижнем или использовать особое форматирование ошибок.

При реализации паттерна стратегия необходимо выделить несколько сущностей:

What
Протокол, который определяет желаемое действие, в нашем случае писать лог.
protocol LoggerStrategy {
func log(_ message: String)
}


Who
Объект, который содержит стратегию и будет её исползовать.
struct Logger {
let strategy: LoggerStrategy

func log(_ message: String) {
strategy.log(message)
}
}


How
Конкретная реализация стратегии, то есть конкретное действие.
struct CapitalizedStrategy: LoggerStrategy {
func log(_ message: String) {
print(message.capitalized)
}
}


Пример использования:
var logger = Logger(strategy: CapitalizedStrategy())
logger.log("my first strategy") // My First Strategy


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

https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe