Sobes.tech
Назад к вопросам
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])

Такой подход улучшает расширяемость и поддерживаемость кода, позволяет менять поведение без изменения клиентского кода.