Strategy, Template Method, Abstract Factory
Rodrigo da Cruz Fujioka fujiokabr@gmail.com
Considerações Importantes
• Unidade 2
• Tempo de nivelamento expirou!
• As aulas são com foco nos objetivos.
• Quem estiver tendo dificuldade tem o tempo
• Quem estiver tendo dificuldade tem o tempo após a aula para dúvidas. Em torno de 20 a 30 minutos.
• Se faltar pegue o assunto com os colegas.
Padrões de Projeto
Objetivos Objetivos
Strategy – Template Method – Abstract Factory Strategy – Template Method – Abstract Factory
Factory Method
Abstract Factory
Classificação: Criacional Conhecido Como: Kit
Propósito:
Prover interfaces ou superclasses para a criação de objetos relacionados ou dependentes, sem especificar a sua classe concreta ousem especificar a sua classe concreta ou implementação [Gamma et al, 1994].
Retornar uma das muitas classes de objetos
relacionadas, onde cada uma delas pode retornar diferentes objetos quando requisitados [Destro, 2004].
Abstract Factory
Classificação: Criacional Conhecido Como: Kit
Propósito:
Prover interfaces ou superclasses para a criação de objetos relacionados ou dependentes, sem especificar a sua classe concreta ousem especificar a sua classe concreta ou implementação [Gamma et al, 1994].
Retornar uma das muitas classes de objetos
relacionadas, onde cada uma delas pode retornar diferentes objetos quando requisitados [Destro, 2004].
Abstract Factory
Motivação 1:
Usada na criação de famílias de classes dependentes de uma interface ou superclasse, com a estrutura
básica do padrão Factory Method para fazer o básica do padrão Factory Method para fazer o
relacionamento entre as classes dependentes as suas respectivas superclasses ou interfaces.
Abstract Factory
Motivação 2:
Da mesma maneira em que aparece no Factory
Method, uma classe é criada contendo um método que decide qual das opções de classes de domínio que decide qual das opções de classes de domínio retornar; entretanto não serão as classes simples a serem escolhidas como opções, mas sim as famílias dessas classes, nas quais, pode-se optar por quais classes internas a cada uma dessas famílias se quer retornar.
Abstract Factory
Motivação 3:
Em resumo, um nível maior de abstração é criado [Destro, 2004]: não se escolhe a classe de retorno dentro de uma família. Opta-se por uma das classes dentro de uma família. Opta-se por uma das classes de retorno e a sua família é automaticamente
retornada. Ou seja, com base nos parâmetros de retorno, uma classe é buscada dentro de uma das famílias disponíveis, sem conhecer as estruturas de relacionamento entre as classes e suas famílias.
Abstract Factory
Motivação 4:
Por isso, o método tem o nome de Abstract Factory (“fábrica abstrata”), pois pode atuar como uma
fábrica de objetos genérica, recebendo um grupo fábrica de objetos genérica, recebendo um grupo
qualquer de objetos relacionados, que serão criados de maneira transparente ao seu relacionamento.
Abstract Factory
Motivação 4:
Por isso, o método tem o nome de Abstract Factory (“fábrica abstrata”), pois pode atuar como uma
fábrica de objetos genérica, recebendo um grupo fábrica de objetos genérica, recebendo um grupo
qualquer de objetos relacionados, que serão criados de maneira transparente ao seu relacionamento.
Abstract Factory
Aplicabilidade Sugestões para o uso desse padrão [Gamma et al, 1994]:
• Situações em que um sistema deve ser independente da maneira como seus produtos são criados, relacionados e representados;
• Quando é necessária uma configuração utilizando uma das várias
• Quando é necessária uma configuração utilizando uma das várias famílias de produtos;
• No projeto de produtos que devem ser, obrigatoriamente, agrupados em famílias e seu uso é inerente a essa condição;
• No fornecimento de uma biblioteca de classes de produtos, e
deve-se revelar apenas suas interfaces ou superclasses, e não suas implementações ou subclasses.
Abstract Factory
Abstract Factory
http://www.dsc.ufcg.edu.br/~jacques/cursos/m ap/html/pat/abstractfactory.htm
http://www.javapractices.com/topic/TopicActio http://www.javapractices.com/topic/TopicActio
n.do?Id=128
Template Method
• Define o esqueleto de um algoritmo numa operação, deixando que subclasses
completem algumas das etapas
• O padrão Template Method permite que
subclasses redefinam determinadas etapas de um algoritmo sem alterar a estrutura do
algoritmo
Template Method
• Resumo
– Um Template Method define um algoritmo usando operações abstratas
– Subclasses fazem override das operações para prover um comportamento concreto
– Este padrão é a base para a construção de frameworks
Quando Utilizar!
• Para implementar partes invariantes de um
algoritmo uma única vez e deixar subclasses
implementarem o comportamento variável
Quando Utilizar!
• Quando comportamento comum entre
subclasses deveria ser fatorado e localizado numa classe comum para evitar duplicação
– É um passo freqüente de "refactoring" de código Primeiro identifique as diferenças
• Coloque as diferenças em novos métodos
• Substitua o código das diferenças por uma chamada a um dos novos métodos
Template Method
Template Method
Template Method
Template Method
Template Method
Template Method
Template Method
1. METSKER, S. J. PADRÕES DE PROJETO EM JAVA, Pág. 197.
2004
2. FOWLER, M. UML ESSENTIALS: um breve guia para a linguagem-padrão de modelagem de objetos. 3ª ed. pág linguagem-padrão de modelagem de objetos. 3ª ed. pág 52. Porto Alegre.Bookman. 2005.
3. FREEMAN, E., FREEMAN, E. Use a cabeça! Padrões de Projeto. 2°Edição Pág 212. Alta Books, 2009.
Strategy!
• Classificação: Comportamental
• Conhecido como: Policy
• Propósito:
– Definir uma família de algoritmos, encapsular cada – 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
Strategy!
• Classificação: Comportamental
• Conhecido como: Policy
• Propósito:
– Definir uma família de algoritmos, encapsular cada – 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
Strategy!
• Motivação: Quando se necessita de um
algoritmo que trata de modos diferentes os
dados submetidos a ele.
Strategy!
• Aplicabilidade:
– Quando uma classe define muitos comportamentos
– Quando classes relacionadas forem diferentes apenas no seu comportamento
– Quando você precisar de diferentes variações de um – Quando você precisar de diferentes variações de um
mesmo algoritmo
– Múltiplas classes diferem somente quanto aos seus comportamentos. A servlet API é um exemplo clássico disso.
– Um algoritmo utiliza dados que não são conhecidos ao cliente.
Strategy!
Estrutura do padrão Strategy
Strategy!
Participantes
• Estrategia : define uma interface comum para todos os algoritmos suportados.
• EstrategiaConcreta1 e EstrategiaConcreta2: implementa o algoritmo usando a interface de Estratégia.
algoritmo usando a interface de Estratégia.
• Contexto:
– É configurado com um objeto EstrategiaConcreta.
– Mantém uma referência para um objeto EstrategiaConcreta.
– Pode definir uma interface que permite a Estrategia acessar seus dados.
Strategy!
Conseqüências
– Vantagens:
• Famílias de algoritmos relacionados;
• Uma alternativa ao uso de subclasses;
• Eliminam comandos condicionais;
• Eliminam comandos condicionais;
– Desvantagens:
• Aumento do número de objetos.
Strategy!
http://www.macoratti.net/08/08/net_stgy.htm http://www.dsc.ufcg.edu.br/~jacques/cursos/m
ap/html/pat/strategy.htm
Exercício
1 – Procure pelo Padrão State e compare ele com o Strategy.
2 – Compare o factory Method com o Abstract Factory!
3 – Implemente em Java ou PHP o template Method para um algoritmo que segue a seguinte ordem
A – Usuário realiza compra A – Usuário realiza compra
B – Usuário escolhe forma de pagamento
C – Usuário realiza pagamento de acordo com a forma escolhida.
D – Mensagem de compra realizada com sucesso
Data Limite -> 22/04/2011 < Não existira prorrogação!