curso - padrões de projeto módulo 2: padrões de...
TRANSCRIPT
![Page 1: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/1.jpg)
Curso - Padrões de Projeto Módulo 2: Padrões de Criação
Vítor E. Silva [email protected]
http://www.javablogs.com.br/page/engenhohttp://esjug.dev.java.net
![Page 2: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/2.jpg)
2
Sobre o Instrutor
Formação: Graduação em Ciência da Computação, com ênfase em
Engenharia de Software, pela Universidade Federal do Espírito Santo (UFES);
Mestrado em Informática (em andamento) na mesma instituição.
Java: Desenvolvedor Java desde 1999; Especialista em desenvolvimento Web; Autor do blog Engenho – www.javablogs.com.br/page/engenho.
Profissional: Consultor em Desenvolvimento de Software Orientado a
Objetos – Engenho de Software Consultoria e Desenvolvimento Ltda.
![Page 3: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/3.jpg)
3
Estrutura do Curso
O Padrão Model-View-ControllerMódulo 5
Padrões de ComportamentoMódulo 4
Padrões de EstruturaMódulo 3
Padrões de CriaçãoMódulo 2
IntroduçãoMódulo 1
![Page 4: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/4.jpg)
4
Conteúdo deste módulo
Introdução; Abstract Factory; Builder; Factory Method; Prototype; Singleton; Conclusões.
![Page 5: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/5.jpg)
Curso - Padrões de Projeto Módulo 2: Padrões de Criação
Introdução
![Page 6: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/6.jpg)
6
Criação de Objetos
Em um sistema OO, precisamos criar objetos que irão interagir para construir a solução do problema.
![Page 7: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/7.jpg)
7
Abordagens para criação – I
Solução inflexível: Cliente se refere a uma implementação
específica de sua dependência; Cliente constrói diretamente uma
instância específica de sua dependência.
Dependencia d = new Dependencia();
![Page 8: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/8.jpg)
8
Abordagens para criação – II
Alguma flexibilidade: Cliente já não mais associa-se com uma
classe concreta; Porém, instancia a mesma diretamente.
Dependencia d = new DependenciaImpl();
![Page 9: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/9.jpg)
9
Abordagens para criação – III
Maior flexibilidade: A fábrica pode escolher a melhor classe
concreta de acordo com um critério: hard-coded, meta-dado, parâmetro, etc.
FabricaDependencias fabrica = new FabricaDependencias();Dependencia d = fabrica.construirDependencia();
![Page 10: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/10.jpg)
10
Injeção de Dependências
bean: Janelaclasse: janelas.estiloA.JanelaPrincipaldependência: aplicacao = bean Aplicacao
bean: Aplicacaoclasse: aplicacao.nucleo.AplicacaoPrincipaldependência: acessoDados = bean AcessoDados
bean: AcessoDadosclasse: persistencia.mysql.AcessoDados
Fábrica deBeans
Programa
obterBean("Janela");
Configuração
![Page 11: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/11.jpg)
11
Cuidados com a flexibilização
Maior flexibilização = Menor chance de ter que reprojetar; Menor desempenho; Maior dificuldade de realizar coisas
simples; Maior dificuldade de compreender o
código. Ex.: meta-data hell.
![Page 12: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/12.jpg)
12
Padrões de Criação
“Abstraem o processo de instanciação, ajudando a tornar o sistema independente da maneira que os objetos são criados, compostos e representados”.
Singleton
Prototype
Builder
Abstract Factory
Escopo de Objeto
Factory MethodEscopo de Classe
![Page 13: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/13.jpg)
Curso - Padrões de ProjetoMódulo 2: Padrões de Criação
Abstract Factory(Fábrica Abstrata)Criação / Objeto
![Page 14: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/14.jpg)
14
Descrição
Intenção: Prover uma interface para criação de
famílias de objetos relacionados sem especificar suas classes concretas.
Também conhecido como: Kit.
![Page 15: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/15.jpg)
15
O problema
O sistema acima utiliza APIs específicas da plataforma para criar o “Look & Feel”;
Como desenvolvê-lo já preparado para ser portado para outra plataforma?
![Page 16: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/16.jpg)
16
A solução
Uma das fábricas de componentes se encarregará da criação dos objetos;
Cliente não conhece as classes concretas.
java.awt.Toolkit implementa este padrão.
![Page 17: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/17.jpg)
17
Estrutura
![Page 18: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/18.jpg)
18
Analogia
Non-Software Examples of Software Design Patterns by Michael Duellhttp://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm
![Page 19: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/19.jpg)
19
Usar este padrão quando...
o sistema tiver que ser independente de como seus produtos são criados, compostos ou representados;
o sistema tiver que ser configurado com uma ou mais famílias de produtos (classes que devem ser usadas sempre em conjunto);
você quiser construir uma biblioteca de produtos e quiser revelar apenas suas interfaces e não suas implementações.
![Page 20: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/20.jpg)
20
Vantagens e desvantagens
Isola classes concretas: Fábricas cuidam da instanciação, o cliente só
conhece interfaces. Facilita a troca de famílias de classes:
Basta trocar de fábrica concreta. Promove consistência interna:
Não dá pra usar um produto de uma família com um de outra.
Criar novos produtos é trabalhoso: É necessário alterar as implementações de todas
as fábricas para suportar o novo produto.
![Page 21: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/21.jpg)
Curso - Padrões de ProjetoMódulo 2: Padrões de Criação
Builder(Construtor)
Criação / Objeto
![Page 22: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/22.jpg)
22
Descrição
Intenção: Separar o processo de construção de um
objeto complexo de sua representação para que o mesmo processo possa criar diferentes representações.
![Page 23: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/23.jpg)
23
O problema
Um objeto lê um texto em RTF e converte para HTML como produto final de um processamento;
Como fazer para preparar este sistema para uma eventual mudança de formato (texto puro, por exemplo)?
![Page 24: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/24.jpg)
24
A solução
Para um sistema que mostre o resultado em texto puro, basta trocar o construtor.
![Page 25: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/25.jpg)
25
Estrutura
![Page 26: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/26.jpg)
26
Algoritmo
![Page 27: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/27.jpg)
27
Analogia
Non-Software Examples of Software Design Patterns by Michael Duellhttp://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm
![Page 28: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/28.jpg)
28
Usar este padrão quando...
o algoritmo para criação de objetos complexos tiver que ser independente das partes que compõem o objeto e como elas são unidas;
o processo de construção tiver que permitir diferentes representações do objeto construído.
![Page 29: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/29.jpg)
29
Vantagens e desvantagens
Permite que varie a representação interna de um produto: Basta construir um novo builder.
Separa o código de construção: Melhora a modularidade, pois o cliente não
precisa saber da representação interna do produto.
Maior controle do processo de construção: Constrói o produto passo a passo, permitindo o
controle de detalhes do processo de construção.
![Page 30: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/30.jpg)
Curso - Padrões de ProjetoMódulo 2: Padrões de Criação
Factory Method(Método Fábrica)Criação / Classe
![Page 31: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/31.jpg)
31
Descrição
Intenção: Definir uma interface para criação de
objetos mas deixar as subclasses decidirem qual classe instanciar. Em outras palavras, delega a instanciação para as subclasses.
Também conhecido como: Virtual Constructor.
![Page 32: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/32.jpg)
32
O problema
Framework específico para uma aplicação que manipula documentos multimídia;
É possível criar um framework mais genérico, para qualquer aplicação de manipulação de documentos?
d = new DocumentoMultimidia(); docs.add(d);d.abrir();
![Page 33: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/33.jpg)
33
A solução
Classes abstratas implementam as funções comuns a todo tipo de documento;
Método fábrica é definido na superclasse e implementado na subclasse.
d = construirDocumento();docs.add(d);d.abrir();
return new DocumentoMultimidia();
![Page 34: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/34.jpg)
34
Estrutura
...product = factoryMethod();...
return new ConcreteProduct();
![Page 35: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/35.jpg)
35
Analogia
Non-Software Examples of Software Design Patterns by Michael Duellhttp://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm
![Page 36: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/36.jpg)
36
Usar este padrão quando...
uma classe não tem como saber a classe dos objetos que precisará criar;
uma classe quer que suas subclasses especifiquem o objeto a ser criado.
![Page 37: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/37.jpg)
37
Vantagens e desvantagens
Melhor extensibilidade: Não é necessário saber a classe concreta
do objeto para criá-lo. Obrigatoriedade da subclasse fábrica:
Não é possível criar somente um produto novo sem fábrica (exceto no caso do parametrizado).
Mostraremos a seguir: Extensão pela subclasse, método fábrica
parametrizado e hierarquias paralelas.
![Page 38: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/38.jpg)
38
Extensão pela subclasse
Retorna uma janela genérica para localizar um documento no disco e abrir.
Retorna uma janela específica para localizar documentos multimídia.
![Page 39: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/39.jpg)
39
Método fábrica parametrizado
Forma f = FabricaForma.obterForma("oval");
FabricaForma fab = mapaFabricas.get("oval");return fab.construirForma();
![Page 40: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/40.jpg)
40
Hierarquias paralelas
Forma f = FabricaForma.obterForma("oval");
ManipuladorForma mf = f.obterManipulador();
![Page 41: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/41.jpg)
Curso - Padrões de ProjetoMódulo 2: Padrões de Criação
Prototype(Protótipo)
Criação / Objeto
![Page 42: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/42.jpg)
42
Descrição
Intenção: Especificar o tipo de objeto a ser criado
utilizando uma instância como protótipo e criar novos objetos copiando este protótipo.
![Page 43: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/43.jpg)
43
O problema
Existe um framework para edição de documentos genéricos;
A ferramenta gráfica para um editor musical precisa conhecer os gráficos específicos, o que anula o benefício conseguido anteriormente.
![Page 44: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/44.jpg)
44
A solução
A ferramenta gráfica é configurada com protótipos dos objetos gráficos;
Quando precisar criar algum deles, chama o método clone(), que retorna uma cópia de si mesmo.
![Page 45: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/45.jpg)
45
Estrutura
![Page 46: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/46.jpg)
46
Analogia
Non-Software Examples of Software Design Patterns by Michael Duellhttp://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm
![Page 47: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/47.jpg)
47
Prototype em Java
Método Object.clone() é um exemplo;Nota n = new Nota(Nota.SOL);
Nota copia = n.clone();
Implementação:class Nota implements Cloneable {
private Tempo tempo; private int som;
public Object clone() {
try {
Nota n = (Nota)super.clone();
n.tempo = tempo.clone(); // Tempo deve ser clonável
return n;
}
catch (CloneNotSupportedException e) { return null; }
} }
![Page 48: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/48.jpg)
48
Usar este padrão quando...
o sistema deve ser independente de como seus produtos são criados, compostos e representados e... as classes que devem ser criadas são
especificadas em tempo de execução; ou você não quer construir uma fábrica
para cada hierarquia de produtos; ou as instâncias da classe clonável só tem
alguns poucos estados possíveis, e é melhor clonar do que criar objetos.
![Page 49: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/49.jpg)
49
Vantagens e desvantagens
Esconde a implementação do produto; Permite adicionar e remover produtos
em tempo de execução (configuração dinâmica da aplicação);
Não necessita de uma fábrica para cada hierarquia de objetos;
Implementar clone() pode ser complicado.
![Page 50: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/50.jpg)
Curso - Padrões de ProjetoMódulo 2: Padrões de Criação
Singleton(Objeto Único)
Criação / Objeto
![Page 51: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/51.jpg)
51
Descrição
Intenção: Garantir que uma classe possui somente
uma instância e prover um ponto de acesso global a ela.
![Page 52: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/52.jpg)
52
O problema
Algumas vezes você precisa que uma classe só tenha uma instância para todo o sistema;
Prover um ponto de acesso static não é suficiente, pois classes poderão ainda construir outra instância diretamente.
![Page 53: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/53.jpg)
53
A solução
Há um ponto de acesso global (método static); Construtor privado ou protected? Depende se as
subclasses devem ter acesso; Bloco de criação poderia ser synchronized para
maior seguranças em ambientes multithread; A instância única poderia ser pré-construída.
public static ObjetoUnico instancia() { if (instanciaUnica == null) { instanciaUnica = new ObjetoUnico(); } return instanciaUnica;}
![Page 54: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/54.jpg)
54
Estrutura
public static Singleton instance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstance;}
![Page 55: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/55.jpg)
55
Analogia
Non-Software Examples of Software Design Patterns by Michael Duellhttp://www2.ing.puc.cl/~jnavon/IIC2142/patexamples.htm
![Page 56: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/56.jpg)
56
Usar este padrão quando...
tiver que haver exatamente uma instância de uma classe e ela tiver que estar acessível a todos num local bem definido;
quiser permitir ainda que esta classe tenha subclasses (construtor protected).
![Page 57: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/57.jpg)
57
Vantagens e desvantagens
Acesso controlado à instância: A própria classe contrla sua instância única.
Não há necessidade de variáveis globais: Variável globais poluem o espaço de nomes.
Permite extensão e refinamento: A classe Singleton pode ter subclasses.
Permite número variado de instâncias: Você pode controlar este número.
Mais flexível do que operações de classe: Usar membro static perde flexibilidade.
![Page 58: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/58.jpg)
Curso - Padrões de Projeto Módulo 2: Padrões de Criação
Conclusões
![Page 59: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/59.jpg)
59
Atenção na criação de objetos
Como representar e como criar objetos é um conceito chave do seu projeto: Pode facilitar ou dificultar o
desenvolvimento; Pode flexbilizar ou enrijecer sua estrutura
de classes. Padrões de criação mostram diversas
alternativas para criação.
![Page 60: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/60.jpg)
60
Os padrões e seus usos
Controlar o número de instâncias = Singleton;
Processo de construção for complexo, envolvendo várias partes = Builder;
Simplesmente flexibilizar a criação: Abstract Factory: famílias de objetos; Factory Method: uma fábrica por
hierarquia; Prototype: a fábrica é a própria classe.
![Page 61: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/61.jpg)
61
Fábricas auxiliam até casos muito simples
Métodos fábrica vs. Construtores: Podem ter nomes mais significativos;
Ex.: BigInteger.probablePrime(). Não precisam criar um objeto novo toda vez;
Ex.: Boolean.valueOf(). Podem retornar instâncias de subclasses:
Collections.synchronizedCollection(). Classes sem construtores public ou protected
não podem ter subclasses; Não é clara a distinção entre métodos fábrica e
outros métodos da classe (static).
![Page 62: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/62.jpg)
62
Conclusões
Estude os padrões: Existem outras alternativas para criação; Existem casos em que são necessárias; Amplia sua visão como projetista.
Atenção aos anti-padrões: Singleton é considerado por alguns um
anti-padrão. Argumentos: Algo ter que ser global = projeto ruim; Clientes ficam acoplados (dificulta os testes); Viola o “princípio da responsabilidade única”.
![Page 63: Curso - Padrões de Projeto Módulo 2: Padrões de Criaçãovitorsouza/wp-content/uploads/java-br... · Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber](https://reader031.vdocuments.net/reader031/viewer/2022021912/5c5de45a09d3f2515c8b8254/html5/thumbnails/63.jpg)
Curso - Padrões de Projeto Módulo 2: Padrões de Criação
Vítor E. Silva [email protected]
http://www.javablogs.com.br/page/engenhohttp://esjug.dev.java.net