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]