🔀 Паттерн стратегия в Swift
Подготовил перевод статьи про реализацию паттерна стратегия.
В общих чертах #strategy #pattern – шаблон из группы поведенческих паттернов проектирования, который определяет семейство схожих алгоритмов, помещает каждый из них в отдельный класс и позволяет использовать их во время выполнения приложения (в runtime).
Короче говоря: инкапсуляция в классы, переиспользование и возможность менять поведение в runtime.
Сценарии использования
1. Разные способы детать одно и то же;
2. Альтерантива наследованию;
3. Альтерантива ветвлению логики: if/else
Пример
Хотим печатать логи, при этом необходимо иметь возможность использовать разные стили: в верхнем регистре, нижнем или использовать особое форматирование ошибок.
При реализации паттерна стратегия необходимо выделить несколько сущностей:
What
Протокол, который определяет желаемое действие, в нашем случае писать лог.
Who
Объект, который содержит стратегию и будет её исползовать.
How
Конкретная реализация стратегии, то есть конкретное действие.
Пример использования:
В статье также представлены другие примеры, такие как форма валидации, настройка ячеек и другие.
https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe
Подготовил перевод статьи про реализацию паттерна стратегия.
В общих чертах #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