O Padrão Strategy é um padrão comportamental, este padrão recomenda que uma classe que faz algo de diversas maneiras diferentes tenha estes algoritmos extraídos para classes separadas chamadas estratégias.
Exemplo de código em Python
class Context():
def __init__(self, strategy: Strategy) -> None:
self._strategy = strategy
@property
def strategy(self) -> Strategy:
return self._strategy
@strategy.setter
def strategy(self, strategy: Strategy) -> None:
self._strategy = strategy
def do_some_business_logic(self) -> None:
print("Context: Sorting data using the strategy (not sure how it'll do it)")
result = self._strategy.do_algorithm(["a", "b", "c", "d", "e"])
print(",".join(result))
class Strategy(ABC):
@abstractmethod
def do_algorithm(self, data: List):
pass
A classe Context define a interface de interesse do cliente, geralmente essa classe aceita uma estratégia no seu construtor, ela também contém um método setter para que esta seja definida em tempo de execução.
A classe Strategy declara as operações comuns para todos as estratégias.
class ConcreteStrategyA(Strategy):
def do_algorithm(self, data: List) -> List:
return sorted(data)
class ConcreteStrategyB(Strategy):
def do_algorithm(self, data: List) -> List:
return reversed(sorted(data))
As classes ConcreteStrategy implementam seus algorítmos específicos enquanto seguem a estrutura definida pela interface Strategy. O Context usa desta interface para chamar os métodos concretos definidos.
A implementação em Python não tem nenhuma particularidade em relação a implementação em Java.
Referências
Padrões de Projeto (Diogo Moreira, 2020)
Mergulho nos Padrões de Projeto - v2020-1.14 (Alexander Shvets, 2020)
Os códigos usados como exemplo foram retirados do livro Mergulho nos Padrões de Projeto.
Top comments (0)