Sobes.tech
Back to questions
Junior — Middle
64

В чем преимущества и недостатки использования паттерна стратегия?

Answer from AI

sobes.tech AI

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

Преимущества:

  • Упрощает расширение и поддержку кода за счет разделения алгоритмов.
  • Позволяет менять алгоритмы динамически без изменения клиента.
  • Избегает множества условных операторов, улучшая читаемость.

Недостатки:

  • Увеличивает количество классов и объектов, что может усложнить структуру.
  • Требует правильного проектирования интерфейсов стратегий.

Пример на Python:

from abc import ABC, abstractmethod

class Strategy(ABC):
    @abstractmethod
    def execute(self, data):
        pass

class ConcreteStrategyA(Strategy):
    def execute(self, data):
        return sorted(data)

class ConcreteStrategyB(Strategy):
    def execute(self, data):
        return sorted(data, reverse=True)

class Context:
    def __init__(self, strategy: Strategy):
        self._strategy = strategy

    def set_strategy(self, strategy: Strategy):
        self._strategy = strategy

    def do_something(self, data):
        return self._strategy.execute(data)

context = Context(ConcreteStrategyA())
print(context.do_something([3,1,2]))  # [1, 2, 3]
context.set_strategy(ConcreteStrategyB())
print(context.do_something([3,1,2]))  # [3, 2, 1]