curso - padrões de projeto módulo 2: padrões de...

63
Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza [email protected] http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net

Upload: vuongkhuong

Post on 09-Feb-2019

216 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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