Esse artigo faz parte da revista Java Magazine edição 50. Clique aqui para ler todos os artigos desta edição
NT-SIZE: 10pt; COLOR: windowtext; FONT-FAMILY: Verdana">que aqui para ler esse artigo em PDF. Use um importante pattern na criação de famílias de objetos Neste artigo, vamos apresentar o design pattern (padrão de projeto) Abstract Factory, que é utilizado para a criação de um conjunto de objetos relacionados, os quais chamaremos de “família de objetos”. Também construímos um exemplo prático de seu uso, conjuntamente com o popular pattern Data Access Object (DAO). Introdução O pattern Abstract Factory foi apresentado pela primeira vez em 1995, na primeira edição do livro conhecido como “Padrões de Projeto” (Design Patterns). Considerado um marco na história do desenvolvimento de software, este livro foi escrito por quatro autores, que depois foram apelidados de “gangue dos quatro” (GoF, de Gang of Four). É utilizado como referência por diversos outros livros e sites dedicados a patterns. Nele são apresentados 23 patterns, classificados em patterns de criação, estruturais e comportamentais. O Abstract Factory é um pattern de criação. Para conhecer um pouco mais sobre patterns, consulte o “Design patterns e o DAO”. Detalhando o Abstract Factory A estrutura de tópicos utilizada para apresentação do Abstract Factory neste artigo é uma adaptação daquela seguida no livro do GoF: • Problema – Descrição do problema que se procura solucionar com o pattern. • Solução – Breve descrição da estratégia da solução a ser adotada. • Estrutura – Diagrama de classes mostrando os elementos utilizados na solução. • Participantes – Descrição de cada um dos elementos apresentados no diagrama criado no tópico Estrutura. • Colaborações – Diagrama de seqüência apresentando a interação entre os elementos utilizados. • Conseqüências – Resultados obtidos com a aplicação do pattern. Problema Precisamos criar famílias de objetos. Estas famílias são formadas por diversos objetos que podem possuir implementações diferentes. Devemos garantir que o aplicativo utilize a família correta, não misturandoobjetos de famílias diferentes. Por exemplo, uma família de objetos pode ser o conjunto de DAOs utilizadospor um aplicativo. (Para o leitor não familiarizado com o pattern DAO, o quadro “Design patterns e o DAO” mostra alguns conceitos essenciais.) Podemos ter um conjunto de DAOs implementado para acesso ao banco de dados utilizando JDBC puro e outro implementado o acesso utilizando Hibernate. Podemos ainda ter um conjunto de DAOs utilizando JDBC com consultas SQL otimizadas para o banco de dados Oracle e outro para o MySQL, e outro ainda para o SQLServer – e assim por diante. A situação que queremos evitar é que parte do aplicativo utilize DAOs de uma família enquanto outra parte utiliza DAOs de outra família. Imagine a situação de um aplicativo de gerenciamento de estoque que deve suportar os bancos de dados Oracle e SQLServer. Suponha que as classes DAO para produtos sejam empresa.oracle.ProdutoDAO e empresa.sqlserver.ProdutoDAO. Não queremos a situação onde a tela de edição utiliza um ProdutoDAO para banco de dados Oracle, enquanto a tela de listagem utiliza um ProdutoDAO para SQLServer, por um descuido do desenvolvedor. Esta situação poderia ocorrer facilmente se tivéssemos o seguinte código: ProdutoDAO dao = new ProdutoDAO(); Neste exemplo simples, dependendo da classe que foi importada, o código pode tanto utilizar a classe para Oracle quanto a classe para SQLServer. Solução A solução é centralizar a criação dos objetos em uma classe que funciona como fábrica de objetos, de forma que possa haver diversas implementações diferentes dessas fábricas. Para isto devemos fornecer uma interface que define os métodos responsáveis pela criação dos objetos relacionados. Esta classe deve ser implementada pelas classes de fábricas concretas.
Artigo Java Magazine 50 - Abstract Factory Aplicado
Artigo publicado pela Java Magazine 50.
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.