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