1.
Especialização
em
Desenvolvimento
Java
UML
e
Padrões
de
Projetos
AULA
05
–
PADRÕES
DE
CRIAÇÃO
Prof.
Vinícius
de
Paula
-‐
viniciusdepaula@unitri.edu.br
3. Factory
Method
ObjeNvo
segundo
o
GoF:
UML e Padrões de Projeto Centro Universitário do Triângulo 3
4. Factory
Method
ObjeNvo
segundo
o
GoF:
• Definir
uma
interface
para
criar
um
objeto
mas
deixar
que
subclasses
decidam
que
classe
instanciar.
UML e Padrões de Projeto Centro Universitário do Triângulo 4
5. Factory
Method
ObjeNvo
segundo
o
GoF:
• Definir
uma
interface
para
criar
um
objeto
mas
deixar
que
subclasses
decidam
que
classe
instanciar.
• Factory
Method
permite
que
uma
classe
delegue
a
responsabilidade
de
instanciação
às
subclasses.
UML e Padrões de Projeto Centro Universitário do Triângulo 5
6. Factory
Method
ObjeNvo
segundo
o
GoF:
• Definir
uma
interface
para
criar
um
objeto
mas
deixar
que
subclasses
decidam
que
classe
instanciar.
• Factory
Method
permite
que
uma
classe
delegue
a
responsabilidade
de
instanciação
às
subclasses.
UML e Padrões de Projeto Centro Universitário do Triângulo 6
Encapsular a escolha da classe concreta a ser utilizada na criação
de objetos de um determinado tipo.
7. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 7
Estrutura do Factory Method, segundo GoF (pág. 122)
8. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 8
Estrutura do Factory Method, segundo GoF (pág. 122)
Classe
ou
interface
que
define
o
objeto
a
ser
criado
9. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 9
Estrutura do Factory Method, segundo GoF (pág. 122)
Classe
ou
interface
que
define
o
objeto
a
ser
criado
Uma
implementação
parNcular
do
Npo
de
objeto
a
ser
criado
10. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 10
Estrutura do Factory Method, segundo GoF (pág. 122)
Uma
implementação
parNcular
do
Npo
de
objeto
a
ser
criado
Classe
ou
interface
que
define
o
objeto
a
ser
criado
Classe
ou
interface
que
define
a
assinatura
do
método
responsável
pela
criação
do
produto
11. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 11
Estrutura do Factory Method, segundo GoF (pág. 122)
Uma
implementação
parNcular
do
Npo
de
objeto
a
ser
criado
Classe
ou
interface
que
define
o
objeto
a
ser
criado
Classe
ou
interface
que
define
a
assinatura
do
método
responsável
pela
criação
do
produto
Classe
que
implementa
ou
sobrescreve
o
método
de
criação
do
produto
12. Factory
Method
Cenário
Prá9co
Considere
um
sistema
bancário
que
precisa
enviar
mensagens
aos
seus
clientes.
Por
exemplo,
após
a
realização
de
uma
compra
com
cartão
de
crédito,
uma
mensagem
contendo
informações
sobre
a
compra
pode
ser
enviada
ao
cliente.
UML e Padrões de Projeto Centro Universitário do Triângulo 12
13. Factory
Method
Cenário
Prá9co
Considere
um
sistema
bancário
que
precisa
enviar
mensagens
aos
seus
clientes.
Por
exemplo,
após
a
realização
de
uma
compra
com
cartão
de
crédito,
uma
mensagem
contendo
informações
sobre
a
compra
pode
ser
enviada
ao
cliente.
Se
esse
cliente
for
uma
pessoa
sica,
poderá́
optar
pelo
recebimento
da
mensagem
através
de
e-‐mail
ou
SMS.
Por
outro
lado,
se
for
uma
pessoa
jurídica,
poderá́
também
receber
a
mensagem
através
de
JMS.
UML e Padrões de Projeto Centro Universitário do Triângulo 13
14. Factory
Method
Cenário
Prá9co
UML e Padrões de Projeto Centro Universitário do Triângulo 14
15. Factory
Method
Cenário
Prá9co
UML e Padrões de Projeto Centro Universitário do Triângulo 15
Cada mecanismo de envio será implementado por uma classe.
Podemos criar uma interface para padronizar essas classes e obter
polimorfismo entre seus objetos.
16. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 16
17. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 17
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
18. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 18
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando
uma
mensagem
por
SMS
19. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 19
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando
uma
mensagem
por
SMS
Enviando
uma
mensagem
por
Email
20. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 20
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Enviando
uma
mensagem
por
SMS
Enviando
uma
mensagem
por
JMS
Enviando
uma
mensagem
por
Email
21. Factory
Method
Cenário
Prá9co
Neste
aspecto
quando
for
necessário
enviar
uma
mensagem,
podemos
uNlizar
diretamente
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 21
Emissor emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
Emissor emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
Crie uma classe para testar os emissores.
22. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 22
public class TestaEmissor1 {
public static void main(String[] args) {
Emissor emissor;
emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
}
}
23. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 23
public class TestaEmissor1 {
public static void main(String[] args) {
Emissor emissor;
emissor = new EmissorSMS();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorEmail();
emissor.envia("UML e Padrões de Projeto");
emissor = new EmissorJMS();
emissor.envia("UML e Padrões de Projeto");
}
}
Utilizando esta abordagem, o código que deseja enviar uma
mensagem referencia diretamente as classes que implementam
os mecanismos de envio.
24. Factory
Method
• Para
eliminar
essa
referência
direta
podemos
adicionar
um
intermediário
entre
o
código
que
deseja
enviar
uma
mensagem
e
as
classes
que
implementam
os
emissores.
UML e Padrões de Projeto Centro Universitário do Triângulo 24
25. Factory
Method
• Para
eliminar
essa
referência
direta
podemos
adicionar
um
intermediário
entre
o
código
que
deseja
enviar
uma
mensagem
e
as
classes
que
implementam
os
emissores.
• Esse
intermediário
será
responsável
pela
escolha
da
classe
concreta
a
ser
uNlizada
para
criar
o
Npo
de
emissor
adequado.
UML e Padrões de Projeto Centro Universitário do Triângulo 25
26. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 26
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
27. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 27
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
Definimos uma classe intermediária que será responsável pela
criação dos emissores, tornando a classe que utiliza os emissores
menos dependente dos mecanismos de envio.
28. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 28
public class EmissorCreator {
public static final int SMS = 0;
public static final int EMAIL = 1;
public static final int JMS = 2;
public Emissor create(int tipoEmissor) {
if(tipoEmissor == EmissorCreator.SMS) {
return new EmissorSMS();
} else if (tipoEmissor == EmissorCreator.EMAIL){
return new EmissorEmail();
} else if (tipoEmissor == EmissorCreator.JMS){
return new EmissorJMS();
} else {
throw new IllegalArgumentException("Tipo de Emissor não suportado");
}
}
}
Altere a classe de teste dos emissores
para utilizar a classe EmissorCreator.
29. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 29
public class TestaEmissor2 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
30. Factory
Method
• E
se
a
parNr
de
agora
o
sistema
Nvesse
que
trabalhar
com
dois
Npos
diferentes
de
envio
de
mensagens:
síncrono
e
assíncrono.
UML e Padrões de Projeto Centro Universitário do Triângulo 30
31. Factory
Method
• E
se
a
parNr
de
agora
o
sistema
Nvesse
que
trabalhar
com
dois
Npos
diferentes
de
envio
de
mensagens:
síncrono
e
assíncrono.
• Como
poderíamos
especializar
o
criador
de
emissores?
UML e Padrões de Projeto Centro Universitário do Triângulo 31
32. Factory
Method
• E
se
a
parNr
de
agora
o
sistema
Nvesse
que
trabalhar
com
dois
Npos
diferentes
de
envio
de
mensagens:
síncrono
e
assíncrono.
• Como
poderíamos
especializar
o
criador
de
emissores?
UML e Padrões de Projeto Centro Universitário do Triângulo 32
33. Factory
Method
• E
se
a
parNr
de
agora
o
sistema
Nvesse
que
trabalhar
com
dois
Npos
diferentes
de
envio
de
mensagens:
síncrono
e
assíncrono.
• Como
poderíamos
especializar
o
criador
de
emissores?
UML e Padrões de Projeto Centro Universitário do Triângulo 33
Definindo subclasses
34. Factory
Method
• Com
base
no
novo
cenário,
novos
produtos
precisam
ser
implementados.
UML e Padrões de Projeto Centro Universitário do Triângulo 34
35. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 35
36. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 36
Implemente as classes necessárias para
testar a especialização do criador de
emissores.
37. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 37
38. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 38
Emissor
39. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 39
Emissor
EmissorAssincronoSMS
EmissorAssincronoJMS
EmissorAssincronoEmail
40. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 40
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
41. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 41
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
EmissorCreator
42. Estrutura
do
Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 42
Emissor
EmissorAssincronoSMS
EmissorAssincronoEmail
EmissorAssincronoJMS
EmissorSincronoSMS
EmissorSincronoEmail
EmissorSincronoJMS
EmissorCreator
EmissorAssincronoCreator
EmissorSincronoCreator
43. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 43
public class TestaEmissor3 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorSincronoCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
44. Factory
Method
UML e Padrões de Projeto Centro Universitário do Triângulo 44
public class TestaEmissor3 {
public static void main(String[] args) {
Emissor emissor1, emissor2, emissor3;
EmissorCreator creator = new EmissorSincronoCreator();
emissor1 = creator.create(EmissorCreator.SMS);
emissor1.envia("UML e Padrões de Projeto");
emissor2 = creator.create(EmissorCreator.EMAIL);
emissor2.envia("UML e Padrões de Projeto");
emissor3 = creator.create(EmissorCreator.JMS);
emissor3.envia("UML e Padrões de Projeto");
}
}
Factory Method permite que uma classe delegue a
responsabilidade de instanciação às subclasses.
45. Onde
podemos
ver
o
uso
do
Factory
Method?
• javax.xml.parsers
UML e Padrões de Projeto Centro Universitário do Triângulo 45
46. Onde
podemos
ver
o
uso
do
Factory
Method?
• java.sql.DriverManager
UML e Padrões de Projeto Centro Universitário do Triângulo 46
48. Abstract
Factory
ObjeNvo
segundo
o
GoF:
UML e Padrões de Projeto Centro Universitário do Triângulo 48
49. Abstract
Factory
ObjeNvo
segundo
o
GoF:
• Prover
uma
interface
para
criar
famílias
de
objetos
relacionados
ou
dependentes
sem
especificar
suas
classes
concretas.
UML e Padrões de Projeto Centro Universitário do Triângulo 49
50. Abstract
Factory
ObjeNvo
segundo
o
GoF:
• Prover
uma
interface
para
criar
famílias
de
objetos
relacionados
ou
dependentes
sem
especificar
suas
classes
concretas.
UML e Padrões de Projeto Centro Universitário do Triângulo 50
Encapsular a escolha das classes concretas a serem utilizadas na
criação de objetos de diversas famílias.
51. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 51
Estrutura do Abstract Factory, segundo GoF (pág. 101)
52. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 52
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface
que
define
as
assinaturas
dos
métodos
responsáveis
pela
criação
dos
objetos
de
uma
família.
53. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 53
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface
que
define
as
assinaturas
dos
métodos
responsáveis
pela
criação
dos
objetos
de
uma
família.
Classe
que
implementa
os
métodos
de
criação
dos
objetos
de
uma
família.
54. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 54
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface
que
define
as
assinaturas
dos
métodos
responsáveis
pela
criação
dos
objetos
de
uma
família.
Classe
que
implementa
os
métodos
de
criação
dos
objetos
de
uma
família.
Interface
que
define
um
Npo
de
produto
55. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 55
Estrutura do Abstract Factory, segundo GoF (pág. 101)
Interface
que
define
as
assinaturas
dos
métodos
responsáveis
pela
criação
dos
objetos
de
uma
família.
Classe
que
implementa
os
métodos
de
criação
dos
objetos
de
uma
família.
Implementação
parNcular
de
um
Npo
de
produto
Interface
que
define
um
Npo
de
produto
56. Abstract
Factory
Cenário
Prá9co
Estabelecimentos
comerciais
normalmente
oferecem
aos
clientes
diversas
opções
de
pagamento.
Por
exemplo,
clientes
podem
efetuar
pagamentos
com
dinheiro,
cartões
de
crédito
ou
débito,
entre
outros.
UML e Padrões de Projeto Centro Universitário do Triângulo 56
57. Abstract
Factory
Cenário
Prá9co
Estabelecimentos
comerciais
normalmente
oferecem
aos
clientes
diversas
opções
de
pagamento.
Por
exemplo,
clientes
podem
efetuar
pagamentos
com
dinheiro,
cartões
de
crédito
ou
débito,
entre
outros.
Pagamentos
com
cartão
são
realizados
por
meio
de
uma
máquina
de
cartão,
oferecida
e
instaladas
por
empresas
como
Cielo
e
Redecard.
Geralmente,
essa
máquina
é
capaz
de
lidar
com
cartões
de
diferentes
bandeiras
(como
Visa
e
Mastercard).
UML e Padrões de Projeto Centro Universitário do Triângulo 57
58. Abstract
Factory
Cenário
Prá9co
Nosso
objeNvo
é
programar
essas
máquinas,
isto
é,
desenvolver
uma
aplicação
capaz
de
se
comunicar
com
as
diferentes
bandeiras
e
registrar
pagamentos.
UML e Padrões de Projeto Centro Universitário do Triângulo 58
59. Abstract
Factory
Cenário
Prá9co
Nosso
objeNvo
é
programar
essas
máquinas,
isto
é,
desenvolver
uma
aplicação
capaz
de
se
comunicar
com
as
diferentes
bandeiras
e
registrar
pagamentos.
No
momento
do
pagamento,
a
máquina
de
cartão
deve
enviar
informações
relaNvas
à
transação
(como
valor
e
senha)
para
a
bandeira
correspondente
ao
cartão
uNlizado.
Além
disso,
a
máquina
deve
aguardar
uma
resposta
de
confirmação
ou
recusa
do
pagamento.
UML e Padrões de Projeto Centro Universitário do Triângulo 59
60. Abstract
Factory
• Nossa
aplicação
será
composta
por
objetos
emissores
e
receptores
de
mensagens.
UML e Padrões de Projeto Centro Universitário do Triângulo 60
61. Abstract
Factory
• Nossa
aplicação
será
composta
por
objetos
emissores
e
receptores
de
mensagens.
• Como
o
protocolo
de
comunicação
de
cada
bandeira
é
diferente,
teremos
um
emissor
e
um
receptor
para
cada
bandeira.
UML e Padrões de Projeto Centro Universitário do Triângulo 61
62. Abstract
Factory
• Nossa
aplicação
será
composta
por
objetos
emissores
e
receptores
de
mensagens.
• Como
o
protocolo
de
comunicação
de
cada
bandeira
é
diferente,
teremos
um
emissor
e
um
receptor
para
cada
bandeira.
• Criaremos
fábricas
específicas
para
cada
bandeira
que
serão
responsáveis
pela
criação
dos
emissores
e
receptores.
UML e Padrões de Projeto Centro Universitário do Triângulo 62
67. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 67
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
68. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 68
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
As fábricas concretas implementam as diferentes
famílias de produtos. Para criar um produto o
cliente usa uma destas fábricas.
69. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 69
Interface que todas as fábricas
concretas devem implementar, o
que consiste em um conjunto de
métodos para fabricar produtos.
As fábricas concretas implementam as diferentes
famílias de produtos. Para criar um produto o
cliente usa uma destas fábricas.
Esta é a família de produtos, cada
fábrica concreta pode produzir um
conjunto inteiro de produtos.
70. Abstract
Factory
UML e Padrões de Projeto Centro Universitário do Triângulo 70
public class TestaComunicadorFactory {
public static void main(String[] args) {
ComunicadorFactory comunicadorFactory = new VisaComunicadorFactory();
Emissor emissor = comunicadorFactory.createEmissor();
String transacao = "Valor=100;Senha=1234";
emissor.envia(transacao);
Receptor receptor = comunicadorFactory.createReceptor();
String mensagem = receptor.recebe();
System.out.println(mensagem);
}
}
71. Abstract
Factory
+
Factory
Method
E
se
quiséssemos
combinar
os
dois
padrões?
UML e Padrões de Projeto Centro Universitário do Triângulo 71
72. Abstract
Factory
+
Factory
Method
E
se
quiséssemos
combinar
os
dois
padrões?
• As
implementações
de
Abstract
Factory
podem
acionar
os
Factory
Methods
para
criar
emissores
e
receptores.
UML e Padrões de Projeto Centro Universitário do Triângulo 72
73. Abstract
Factory
+
Factory
Method
E
se
quiséssemos
combinar
os
dois
padrões?
• As
implementações
de
Abstract
Factory
podem
acionar
os
Factory
Methods
para
criar
emissores
e
receptores.
UML e Padrões de Projeto Centro Universitário do Triângulo 73
public class VisaComunicadorFactory implements ComunicadorFactory {
private EmissorCreator emissorCreator = new EmissorCreator();
private ReceptorCreator receptorCreator = new ReceptorCreator();
public Emissor createEmissor() {
return emissorCreator.create(EmissorCreator.VISA);
}
public Receptor createReceptor() {
return receptorCreator.create(ReceptorCreator.VISA);
}
}
74. Abstract
Factory
+
Factory
Method
E
se
quiséssemos
combinar
os
dois
padrões?
• As
implementações
de
Abstract
Factory
podem
acionar
os
Factory
Methods
para
criar
emissores
e
receptores.
UML e Padrões de Projeto Centro Universitário do Triângulo 74
public class VisaComunicadorFactory implements ComunicadorFactory {
private EmissorCreator emissorCreator = new EmissorCreator();
private ReceptorCreator receptorCreator = new ReceptorCreator();
public Emissor createEmissor() {
return emissorCreator.create(EmissorCreator.VISA);
}
public Receptor createReceptor() {
return receptorCreator.create(ReceptorCreator.VISA);
}
}
Altere a implementação de forma que os
emissores e receptores sejam criados por
Factory Methods
75. Padrão
DAO
• O
padrão
DAO
(Data
Access
Object)
tem
como
objeNvo
construir
uma
camada
de
acesso
aos
dados
de
forma
a
isolar
a
camada
do
modelo
da
camada
de
persistência.
UML e Padrões de Projeto Centro Universitário do Triângulo 75
DB
LDAP
M1
M2
Persistência
Classes
do
Modelo
DAO
76. Padrão
DAO
Alguns
beneMcios
de
se
u9lizar
o
padrão
DAO:
• O
mecanismo
de
persistência
pode
ser
alterado
a
qualquer
momento
sem
ter
que
modificar
a
camada
de
modelo.
• Vários
mecanismos
de
persistência
podem
ser
uNlizados
de
forma
transparente
para
o
cliente.
• Com
o
padrão
DAO,
podemos
abstrair
e
encapsular
o
acesso
às
fontes
de
dados.
- Gerencia
a
conexão
com
a
fonte
e
sabe
como
obter
os
dados.
UML e Padrões de Projeto Centro Universitário do Triângulo 76
77. Trabalho
Construa
uma
aplicação
contendo
operações
CRUD
para
um
determinado
cenário
de
negócio.
UML e Padrões de Projeto Centro Universitário do Triângulo 77
78. Trabalho
Construa
uma
aplicação
contendo
operações
CRUD
para
um
determinado
cenário
de
negócio.
ü Deverá
ser
implementado
um
DAO
Factory
para
instanciar
as
formas
de
persistência
suportadas
pela
aplicação,
no
contexto
do
trabalho,
pelo
menos
duas.
UML e Padrões de Projeto Centro Universitário do Triângulo 78
79. Trabalho
Construa
uma
aplicação
contendo
operações
CRUD
para
um
determinado
cenário
de
negócio.
ü Deverá
ser
implementado
um
DAO
Factory
para
instanciar
as
formas
de
persistência
suportadas
pela
aplicação,
no
contexto
do
trabalho,
pelo
menos
duas.
ü Uma
interface
gráfica
amigável
deverá
ser
construída.
UML e Padrões de Projeto Centro Universitário do Triângulo 79
80. Trabalho
Construa
uma
aplicação
contendo
operações
CRUD
para
um
determinado
cenário
de
negócio.
ü Deverá
ser
implementado
um
DAO
Factory
para
instanciar
as
formas
de
persistência
suportadas
pela
aplicação,
no
contexto
do
trabalho,
pelo
menos
duas.
ü Uma
interface
gráfica
amigável
deverá
ser
construída.
UML e Padrões de Projeto Centro Universitário do Triângulo 80
Artigo para auxiliar na definição da arquitetura da aplicação.
http://www.informit.com/guides/content.aspx?g=java&seqNum=442
81. Bibliografia
• Gamma,
Erich;
Richard
Helm,
Ralph
Johnson,
John
M.
Vlissides
.
Design
pagerns:
elements
of
reusable
object-‐oriented
sohware.
Reading:
Addison-‐
Wesley,
1995.
• Erich
Freeman,
Elizabeth
Freeman.
HeadFirst
–
Design
Pagerns.
O
́REILLY
2004.
• METSKER,
J.
Design
Pagerns
Java
Workbook.
EUA:
Addison-‐Wesley
2002.
• K19
Treinamentos,
“Design
Pagerns
em
Java”.
UML e Padrões de Projeto Centro Universitário do Triângulo 81