Padrões-07 - Padrões Criacionais
-
Upload
nicola-zagari -
Category
Technology
-
view
1.699 -
download
9
description
Transcript of Padrões-07 - Padrões Criacionais
![Page 1: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/1.jpg)
Padrões de Projeto
Padrões Criacionais
![Page 2: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/2.jpg)
2 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 3: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/3.jpg)
3 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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”
![Page 4: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/4.jpg)
4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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);
![Page 5: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/5.jpg)
5 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Diagrama de Classes do Jogo de Labirinto
![Page 6: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/6.jpg)
6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Classe MapSite
![Page 7: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/7.jpg)
7 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Classe Room
![Page 8: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/8.jpg)
8 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Classes Wall e Door
![Page 9: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/9.jpg)
9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Classe Maze
![Page 10: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/10.jpg)
10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
Classe MazeGame
![Page 11: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/11.jpg)
11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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
![Page 12: Padrões-07 - Padrões Criacionais](https://reader031.fdocuments.net/reader031/viewer/2022013114/549693c9b47959564d8b5018/html5/thumbnails/12.jpg)
12 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari
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)