Slides - LES - PUC-Rio

Propaganda
Strategy
Projeto de Sistemas de Software
Fernando de Freitas Silva
Strategy
• Propósito
– Definir uma família de algoritmos, encapsular cada um, e fazêlos intercambiáveis.
– Strategy permite que algoritmos variem independentemente
entre clientes que os utilizam.
• Também conhecido como:
– Policy
© LES/PUC-Rio
Motivação
• Existem muitos algoritmos para quebrar um texto em
linhas.
– Separar o algoritmo de quebra de linha do cliente simplifica a
codificação do mesmo.
– Diferentes algoritmos são apropriados para diferentes
aplicações.
– Tornar o algoritmo parte do cliente dificulta adição de novos
algoritmos.
© LES/PUC-Rio
Aplicabilidade
• Muitas classes relacionadas só diferem no comportamento.
• Você precisa de variantes diferentes de um algoritmo.
• Um algoritmo usa dados sobre os que os clientes não deveriam
saber. Use o padrão Strategy para evitar expor estruturas de dados
complexas, específicas do algoritmo.
• Uma classe define muitos comportamentos, e estes se aparecem
como declarações condicionais.
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Participantes
• Strategy
– Define uma interface comum para todos os algoritmos
suportados. Context usa esta interface para chamar o
algoritmo definido por uma ConcreteStrategy.
• ConcreteStrategy
– Implementa o algoritmo usando a interface de Strategy.
• Context
– É configurado com um objeto ConcreteStrategy;
– Mantém uma referência para um objeto Strategy;
– Pode definir uma interface que permite a Strategy acessar seus
dados.
© LES/PUC-Rio
Colaborações
• Estratégia e Contexto interagem para implementar o
algoritmo escolhido. Um contexto pode passar todos os
dados requeridos pelo algoritmo à estratégia quando o
algoritmo é chamado.
• Um contexto remete pede de seus clientes a sua estratégia.
Os clientes normalmente criam e passam um objeto de
ConcreteStrategy ao contexto; depois disso, clientes
interagem exclusivamente com o contexto.
© LES/PUC-Rio
Conseqüências
1. Famílias de algoritmos relacionados.
2. Uma alternativa para subclassing.
3. Strategy elimina declarações condicionais.
4. Escolhas de implementações.
5. Os clientes devem estar atentos as estratégias existentes.
6. Comunicação de cima entre Estratégia e Contexto.
7. Aumentou número de objetos.
© LES/PUC-Rio
Download