Use a Cabeca Padroes e Projetos
28 pág.

Use a Cabeca Padroes e Projetos


DisciplinaPadrões de Projeto257 materiais511 seguidores
Pré-visualização11 páginas
patos.
E. Os patos não conseguem voar e grasnar ao mesmo tempo.
F. As alterações podem afetar sem querer outros patos.
Eu poderia tirar \ufb02 y() da 
superclasse Duck e criar uma 
interface Flyable() com um 
método \ufb02 y(). Assim, somente 
os patos que devem voar irão 
implementar essa interface e ter 
um método \ufb02 y()... e também posso 
criar uma Quackable, já que nem 
todos os patos podem grasnar.
5
Bem-Vindo aos Padrões de Projetos
 O que VOCÊ acha deste projeto?
 O que você faria se fosse Joe?
Sabemos que nem todas as subclasses devem ter o comportamento de 
voar ou grasnar, então a herança não é a resposta certa. Mas, embora 
fazer as subclasses implementar Flyable e/ou Quackable resolva parte do 
problema (sem fazer patos de borracha voar inadequadamente), destrói 
completamente a reutilização de código para esses comportamentos, 
criando apenas um pesadelo de manutenção diferente. E é claro que 
pode haver mais de um tipo de comportamento de vôo até entre os 
patos que voam...
Neste ponto, você pode estar esperando que um Padrão de Projetos 
apareça em um cavalo branco e salve o dia. Mas qual seria a graça? Não, 
vamos encontrar uma solução da maneira antiga \u2013 aplicando princípios 
de design de software OO adequados.
MallardDuck
display()
\ufb02 y()
quack()
RedheadDuck
display()
\ufb02 y()
quack()
RubberDuck
display()
quack()
DecoyDuck
display()
Duck
swim()
display()
// OUTROS métodos parecidos com 
duckÖ
Flyable
 y()
Quackable
quack()
Esta é a idéia mais idiota que você já teve. 
Você consegue dizer \u201c código duplicado\u201d? 
Se você achava que ter que substituir alguns 
métodos era ruim, como irá se sentir quando 
precisar fazer uma pequena alteração no 
comportamento de vôo... de todas as 48 
subclasses de vôo de Duck?!