Назад к вопросам
Junior — Middle
72
Можете объяснить принцип действия и особенности паттерна Стратегия в объектно-ориентированном программировании?
Компании, где спрашивали
EnjoyPro
Ответ от нейросети
sobes.tech AI
Паттерн Стратегия позволяет определить семейство алгоритмов, инкапсулировать каждый из них и делать их взаимозаменяемыми. Это позволяет изменять поведение объекта во время выполнения, не меняя его кода.
Основная идея — вынести алгоритмы в отдельные классы, реализующие общий интерфейс, и в зависимости от ситуации использовать нужный класс.
Пример на Swift:
protocol SortingStrategy {
func sort(_ array: [Int]) -> [Int]
}
class BubbleSort: SortingStrategy {
func sort(_ array: [Int]) -> [Int] {
// реализация пузырьковой сортировки
return array // упрощённо
}
}
class QuickSort: SortingStrategy {
func sort(_ array: [Int]) -> [Int] {
// реализация быстрой сортировки
return array.sorted() // для примера
}
}
class Context {
private var strategy: SortingStrategy
init(strategy: SortingStrategy) {
self.strategy = strategy
}
func setStrategy(_ strategy: SortingStrategy) {
self.strategy = strategy
}
func sortArray(_ array: [Int]) -> [Int] {
return strategy.sort(array)
}
}
// Использование:
let context = Context(strategy: BubbleSort())
let sorted = context.sortArray([3, 1, 2])
context.setStrategy(QuickSort())
let sortedQuick = context.sortArray([3, 1, 2])
Такой подход улучшает расширяемость и поддерживаемость кода, позволяет менять поведение без изменения клиентского кода.