Можете объяснить принцип действия и особенности паттерна Стратегия в объектно-ориентированном программировании?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Основная идея — вынести алгоритмы в отдельные классы, реализующие общий интерфейс, и в зависимости от ситуации использовать нужный класс.

Пример на 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])

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее