Sobes.tech
Junior — Middle

What are the advantages and disadvantages of using the strategy pattern?

sobes.tech AI

Answer from AI

The 'Strategy' pattern allows defining a family of algorithms, encapsulating each one, and making them interchangeable. This facilitates changing the behavior of an object at runtime.

Advantages:

  • Simplifies code extension and maintenance by separating algorithms.
  • Allows changing algorithms dynamically without modifying the client.
  • Avoids many conditional operators, improving readability.

Disadvantages:

  • Increases the number of classes and objects, which can complicate the structure.
  • Requires proper design of strategy interfaces.

Example in 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]