2. Padrões Criacionais
• Abstraem o processo de instanciação
– Sistema independente de como seus objetos
são criados, compostos e representados
– Um padrão criacional:
• De classe: usa herança para variar a classe que é
instanciada
• De objeto: delega instanciação a outro objeto
• Sistemas hoje dependem mais de
composição de objetos do que de herança
de classes
2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
3. Padrões Criacionais
• Características comuns do padrões
criacionais:
– Todos eles encapsulam o conhecimento
sobre quais classes concretas o sistema usa
– Escondem como as instâncias destas classes
são criadas e postas juntas
• Alguns são complementares, outros são
“competidores”
3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
4. Exemplo: um jogo de labirinto
• Um labirinto (Maze) é um conjunto de
cômodos (Room)
• Um cômodo conhece seus “vizinhos”
• “Vizinhos” podem ser outro cômodo, uma
parede (Wall) ou uma porta (Door) para
outro cômodo
• Cada cômodo tem 4 lados:
enum Direction (North, South,
East, West);
4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
5. Diagrama de Classes do Jogo de
Labirinto
5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
6. Classe MapSite
6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
7. Classe Room
7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
8. Classes Wall e Door
8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
9. Classe Maze
9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
10. Classe MazeGame
10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
11. Considerações
• O problema com este código não está no
tamanho e sim em sua inflexibilidade
• Mudar o labirinto implica em reescrever o
código (reimplementar) ou mudar partes
(o que está sujeito a erros, além de não
promover reuso)
– Padrões criacionais tornam mais fácil mudar
as classes que definem os componentes do
labirinto
11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma
12. Reuso do layout do Labirinto
• Suponha um novo labirinto com:
– DoorNeedingSpell
– EnchantedRoom
• Seria necessário recodificar as partes que instanciam estas
classes
• Padrões criacionais provêem diferentes formas de se
remover estas referências explícitas a classes concretas:
– Chamando funções virtuais (Factory)
– Passando objetos com parâmetros (Abstract Factory)
– Usando herança para mudar partes (Builder)
– Usando parametrização (Protótipo)
12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari
of Reusable OO Software - Gamma