Padrões GoF - Strategy
1
O Padrão Strategy
• O padrão Strategy é semelhante ao padrão Template
– Recordando: Template define em uma classe X um algoritmo composto
por vários passos. Alguns desses passos são implementados de forma
diferente nas subclasses de X.
• O padrão Strategy fornece diferentes implementações de um
algoritmo para uma classe cliente.
• A classe cliente usa a implementação mais adequada em um
dado instante.
• GOF Book:
– “Define a family of algorithms, encapsulate each one, and make them
interchangeable.
– “Strategy lets the algorithm vary independently from clients that use it.”
2
Estrutura do Strategy
3
Objetos Participantes
• Strategy:
– Define uma interface comum para todos os algoritmos suportados.
– O objeto Context usa essa interface comum para chamar o algoritmo
definido (implementado) por um objeto ConcreteStrategy.
• ConcreteStrategy
– Implementa o algoritmo usando a interface definida por Strategy
• Context
– É configurado com um objeto ConcreteStrategy
– Mantém uma referência para um objeto Strategy
– Pode definir uma interface que permite que o objeto Strategy faça
acesso aos seus dados.
4
Strategy – exemplo
• Uma instituição de ensino utiliza uma forma de calcular o grau
final de um aluno em uma disciplina cursada.
– Esse grau é uma letra: A, B, C, D ou E.
– Além disso, esse grau é calculado a partir de notas atribuídas a
avaliações.
• O projetista identificou que, atualmente, cada nota varia na
faixa de 0 até 10.
– No entanto, identificou que é comum a coordenação modificar a
estratégia (algoritmo) de atribuição de graus a partir da notas das
avaliações.
• Já existe uma classe (Participacao) que representa
participações de alunos em uma disciplina.
• Qual o melhor projeto de classes para cálculo do grau?
5
Strategy – exemplo (cont.)
• Nessa solução, Participacao é uma classe que representa participações de
alunos em uma disciplina e suas correspondentes avaliações em termos de
notas. Além disso, a operação calcular retorna o grau do aluno.
6
Strategy – vantagens
• Uma vantagem dessa solução está na flexibilidade resultante.
– No exemplo, note que a região de código cliente não precisa ser
alterada quando a forma de cálculo de grau tiver que ser alterada.
– Tudo que a região de código cliente conhece acerca da região de código
fornecedora do serviço é que existe uma operação chamada calcular,
que realizar o cálculo.
– A região de código cliente não sabe, e nem precisa saber, qual o objeto
especifico que está fornecendo uma implementação dessa operação.
• O acoplamento abstrato é mantido entre os elementos
envolvidos.
7
Download

Padrões GoF - Strat.. - PUC-Rio