Académique Documents
Professionnel Documents
Culture Documents
PRINCIPAL
Principal
ARQUITETURA DE SOFTWARE
DESENVOLVIMENTO
ENGENHARIA DE SOFTWARE
OUTROS
DESENVOLVIMENTO
Publicao Anterior
Pesquisa
Procure aqui..
Ol pessoal, Hoje vamos ver um pouco como funciona o padro Factory Method. Este um padro de Criao (Creational Pattern) e lida com o problema de criao de objetos. Problema Este padro utilizado quando voc deseja criar um objeto sem especificar qual a classe vai ser utilizada. O padro resolve isso definindo uma interface para criar um objeto, mas deixando as subclasses decidirem que classe instanciar.
JSF versus Struts
6 de outubro de 2008, 6 Comentrios
Subscribe
to RSS Feed
Seguidores
406
100
Fs
Popular
Comentrios
Tags
Figura 1: Diagrama de Classes para o Factory Method. Utilizando nosso exemplo anterior (veja Abstract Factory) no nosso cdigo de uma aplicao GED poderamos utilizar o padro Factory Method junto com o Abstract Factory. Com o Abstract Factory nos criamos as familias de objetos relacionados e com o Factory Method nos criamos a fabrica que realmente vai instanciar o classe. Ou seja, ns delegamos a factory a responsabilidade de escolher que classe instanciar.
ANLISE UML ARQUITETURA DE SISTEMAS CERTIFICAO DESENVOLVIMENTO JAVA DESENVOLVIMENTO WEB ENGENHARIA DE SOFTWARE ENQUETES EVENTOS FERRAMENTAS DE TESTE GERAL MODELAGEM DE PROCESSOS NOTCIAS PADRES DE PROJETO
Categorias
www.portalarquiteto.com.br/o-padrao-factory-method/
1/4
17/09/13
Observe que modificamos as factorys do Abstract Factory (compare com o post sobre Factory Method) para agora chamar a respectiva Factory Method. Classes modificadas: PdfDocumentFactory, TxtDocumentFactory.
p a c k a g eb r . g e d . a b s t r a c t f a c t o r y . c o n c r e t e ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t F a c t o r y ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t R e a d e r ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t W r i t e r ; i m p o r tb r . g e d . f a c t o r y m e t h o d . D o c u m e n t R e a d e r F a c t o r y ; i m p o r tb r . g e d . f a c t o r y m e t h o d . D o c u m e n t W r i t e r F a c t o r y ; p u b l i cc l a s sP d f D o c u m e n t F a c t o r yi m p l e m e n t sD o c u m e n t F a c t o r y { @ O v e r r i d e p u b l i cD o c u m e n t R e a d e rc r e a t e D o c u m e n t R e a d e r () { S y s t e m . o u t . p r i n t l n (" P d f D o c u m e n t F a c t o r y . c r e a t e D o c u m e n t R e a d e r: : :P D F ") ; / /A Q U IE S T AAN O S S AF A C T O R YM E T H O D r e t u r nD o c u m e n t R e a d e r F a c t o r y . g e t R e a d e r (D o c u m e n t F a c t o r y . P D F) ; } @ O v e r r i d e p u b l i cD o c u m e n t W r i t e rc r e a t e D o c u m e n t W r i t e r () { S y s t e m . o u t . p r i n t l n (" P d f D o c u m e n t F a c t o r y . c r e a t e D o c u m e n t W r i t e r: : :P D F ") ; / /A Q U IE S T AAN O S S AF A C T O R YM E T H O D r e t u r nD o c u m e n t W r i t e r F a c t o r y . g e t W r i t e r (D o c u m e n t F a c t o r y . P D F) ; } } p a c k a g eb r . g e d . a b s t r a c t f a c t o r y . c o n c r e t e ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t F a c t o r y ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t R e a d e r ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t W r i t e r ; i m p o r tb r . g e d . f a c t o r y m e t h o d . D o c u m e n t R e a d e r F a c t o r y ; i m p o r tb r . g e d . f a c t o r y m e t h o d . D o c u m e n t W r i t e r F a c t o r y ; p u b l i cc l a s sT x t D o c u m e n t F a c t o r yi m p l e m e n t sD o c u m e n t F a c t o r y { @ O v e r r i d e p u b l i cD o c u m e n t R e a d e rc r e a t e D o c u m e n t R e a d e r () { S y s t e m . o u t . p r i n t l n (" T x t D o c u m e n t F a c t o r y . c r e a t e D o c u m e n t R e a d e r: : :T X T ") ; / /A Q U IE S T AAN O S S AF A C T O R YM E T H O D r e t u r nD o c u m e n t R e a d e r F a c t o r y . g e t R e a d e r (D o c u m e n t F a c t o r y . T X T) ; } @ O v e r r i d e p u b l i cD o c u m e n t W r i t e rc r e a t e D o c u m e n t W r i t e r () { S y s t e m . o u t . p r i n t l n (" T x t D o c u m e n t F a c t o r y . c r e a t e D o c u m e n t W r i t e r: : :T X T ") ; / /A Q U IE S T AAN O S S AF A C T O R YM E T H O D r e t u r nD o c u m e n t W r i t e r F a c t o r y . g e t W r i t e r (D o c u m e n t F a c t o r y . T X T) ; } } p a c k a g eb r . g e d . f a c t o r y m e t h o d ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t R e a d e r ; p u b l i ca b s t r a c tc l a s sR e a d e r F a c t o r y { p u b l i cs t a t i cD o c u m e n t R e a d e rg e t R e a d e r (S t r i n gr e a d e r T y p e) {r e t u r nn u l l ;} } p a c k a g eb r . g e d . f a c t o r y m e t h o d ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t W r i t e r ; p u b l i ca b s t r a c tc l a s sW r i t e r F a c t o r y { p u b l i cs t a t i cD o c u m e n t W r i t e rg e t W r i t e r (S t r i n gr e a d e r T y p e) {r e t u r nn u l l ;} } p a c k a g eb r . g e d . f a c t o r y m e t h o d ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . c o n c r e t e . P d f D o c u m e n t R e a d e r ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . c o n c r e t e . T x t D o c u m e n t R e a d e r ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t F a c t o r y ; i m p o r tb r . g e d . a b s t r a c t f a c t o r y . i n t e r f a c e s . D o c u m e n t R e a d e r ;
Publicaes Recentes
Tudo sobre a nova especificao JSF
27 de junho de 2013, Nenhum Comentrio
www.portalarquiteto.com.br/o-padrao-factory-method/
2/4
17/09/13
Utilizaes comuns Utilize quando quiser postergar a instanciao de suas classes. Uma classe quer que suas subclasses especifiquem os objetos que criam. Quando a escolha de qual classe instanciar for tomada em tempo de execuo. Conseqncias Segundo GoF o padro Abstract Factory tem as seguintes vantagens e desvantagens: - elimina a necessidade de anexar classes especificas das aplicaes no cdigo - fornece um gancho para as subclasses. A criao de classes e subclasses se torna mais flexvel. - como desvantagem podemos citar o fato de que podemos ter que criar varias subclasses da classe Creator apenas para criar um ConcreteProduct. Concluses O padro Factory Method um velho conhecido dos programadores Java. Ele esta presente em Collections. Em Collections o mtodo iterator uma Factory Method. Pense aqui: ele cria um objeto, retorna uma interface, implementado por vrias classes. Este padro justamente sobre isso: diversas classes que implementam a mesma operao, retornam as mesma interface (ou classe abstrata) mas retornam diferentes implementaes. Por hoje s pessoal.
POSTADOS EM
PADRES DE PROJETO
www.portalarquiteto.com.br/o-padrao-factory-method/
3/4
17/09/13
Related
Evento JBossInBossa2010
Email (origatrio)
Site
Comentrio da publicao
Links de Parceiros
Curso Java BH Curso java SE BH Curso Java EE BH Descontos diversas Lojas Farmcia de Manipulao e Emagrecimento Farmcia Manipulao e Emagrecimento Perguntas e respostas de Compra Portal Imobilirio
Tweets Recentes
Siga-nos no Twitter
Encontre-nos no Facebook
Portal do Arquiteto
Curtir 100 pessoas curtiram Portal do Arquiteto.
www.portalarquiteto.com.br/o-padrao-factory-method/
4/4