Strategy Projeto de Sistemas de Software Evelin Carvalho Freire de Amorim Sérgio Luiz Ruivace Cerqueira
Strategy Propósito Agrupar uma família de algoritmos, encapsulando cada algoritmo. Cada algoritmo pode ser substituível um pelo outro o que torna possível o cliente variar entre qualquer dos algoritmos. © LES/PUC-Rio
Amarrar estas estratégias não é uma boa solução. Motivação Uma biblioteca de Aprendizado de Máquina (AM) pode ter diferentes estratégias para um problema de classificação. Amarrar estas estratégias não é uma boa solução. Diferentes algoritmos são apropriados em momentos diferentes. Uma árvore de decisão é pode ser mais apropriada para um tipo de problema e AdaBoost para outro. As estratégias de AM se tornam difíceis de mudar se fazem parte dos clientes. Os algoritmos de AM estão em constante processo de otimização. © LES/PUC-Rio
Quando as classes diferem apenas no comportamento. Aplicabilidade Quando as classes diferem apenas no comportamento. A necessidade de algoritmos com diferentes comportamentos. Quando o algoritmo utiliza dados que o cliente desconhece. Evita declarações condicionais encapsulando em classes Strategy. © LES/PUC-Rio
Estrutura © LES/PUC-Rio
Possui um objeto ConcreteStrategy. Participantes Strategy: Declara uma interface em comum para os algoritmos suportados. ConcreteStrategy: Implementa o algoritmo utilizando a interface Strategy. Context: Possui um objeto ConcreteStrategy. Mantém referência para um objeto Strategy. Pode definir uma interface para Strategy acessar seus dados. © LES/PUC-Rio
Para escolher o algoritmo as classes Strategy e Context interagem. Colaborações Para escolher o algoritmo as classes Strategy e Context interagem. O cliente cria e passa um objeto ConcreteStrategy para o Context. O cliente interage somente com o Context. © LES/PUC-Rio
Agrupar algoritmos relacionados Uma alternativa a subclasses Conseqüências Benefícios Agrupar algoritmos relacionados Uma alternativa a subclasses Eliminação de declaração de condicionais Escolha de diferentes implementações Desvantagens O cliente deve conhecer as diferentes estratégias Overhead de comunicação entre Strategy e Context Aumento do número de objetos © LES/PUC-Rio
Exemplo de Código
Exemplo de Código