Você está na página 1de 8

Padro de Projeto: o Abstract Factory e suas aplicaes

Miguel ngelo Rodrigues Mocbel1


1

Faculdade de Sistemas de Informao Universidade Federal do Par (UFPA) Caixa Postal 68.400-000 Camet PA Brasil
miguelsystem@live.com

Abstract. This article comes to conceptualize and explain one of the design patterns used by most developers, the Abstract Factory. That applied to the object orientation, the organization brings a better code structure and implementation of the same for the creation of objects. This design pattern is to define an abstract class or an interface that will be responsible for creating the object. To this end, shown are examples and characteristics of this pattern. Resumo. Este artigo vem conceituar e explicar um dos padres de projetos mais usados pelos desenvolvedores, o Abstract Factory. Que, aplicado a orientao a objetos, traz uma organizao melhor a estrutura do cdigo e a execuo do mesmo em relao a criao dos objetos. Esse padro de projeto consiste em definir uma classe abstrata ou uma interface que ir ser responsvel pela criao do objeto. Para isso, so mostrados exemplos e caractersticas desse padro.

1. Introduo
Na rea de projeto de sistemas, o modo como o software vai ser desenvolvido um ponto importante, tanto que para isso foram elaborados vrios padres de projetos para diferentes etapa do desenvolvimento de um sistema. Os padres de projeto GoF (Gang of Four) dispe de trs categorias, criacional, estrutural e comportamental. A primeira categoria trata de como se dar a criao dos objetos, a segunda voltada para as associaes entre as classes e a ltima responsvel em definir o aspecto das interaes e responsabilidades tanto de objetos quanto classes. Entraremos em detalhe no padro de projeto de categoria criacional, o Abstract Factory, explicando suas caractersticas, diferenas em relao Factory Method e como tambm mostrando sua aplicao atravs de exemplos.

2. Abstract Factory
O Abstract Factory um dos padres de projeto GoF, ele pertence a categoria de criao, responsvel em definir como se dar a criao de objetos durante a execuo do programa. Esse padro consiste em desenvolver um interface, no qual est retornar uma famlia das vrias famlias de objetos relacionados, sendo que essa interface que vai criar os objetos. Agindo como uma fbrica ou um criador, ela gerencia qual objeto ser retornada a partir de um grupo de objetos que a interface possui.

2.1 Diferena entre o Factory Method Com algumas caractersticas comuns do padro de projeto Factory Method, Abstract Factory traz um nvel mais alto de abstrao e se diferencia por ter a capacidade de tratar famlias de objetos. O Factory Method possui uma classe abstrata no qual retorna um objeto concreto apenas, sendo este atravs da herana das sub-classes do produto desta classe abstrata (fbrica), j o Abstract Factory trabalha com composio para tomar deciso de qual famlia o objeto ser retornado. O padro Factory Method esconde a construo de somente um objeto e o padro Abstract Factory esconde a construo de uma famlia de objetos.

3. Aplicaes
Devemos usar o padro Abstract Factory quando:

O sistema precisa de independncia de como os produtos se comportam quando so criados. O sistema precisa ou precisar ser configurado para trabalhar com diversas famlias de produtos. Uma famlia de produtos desenhada para trabalhar apenas quando todos juntos. Uma biblioteca de produtos necessria, para as quais relevante no somente a interface, mas a implementao tambm.

O padro Abstract Factory o mais apropriado para criar um grupo combinado de objetos.

4. Vantagens e desvantagens
O padro Abstract Factory tem as seguintes vantagens e desvantagens:

Ele isola as classes concretas. O padro Abstract Factory ajuda a controlar as classes de objetos criadas por uma aplicao. Uma vez que a fbrica encapsula a responsabilidade e o processo de criar objetos, isola os clientes das classes de implementao. Os clientes manipulam as instncias atravs das suas interfaces abstratas. Nomes de classes ficam isolados na implementao da fbrica concreta. Ele torna fcil a troca de famlias de produtos. A classe de uma fbrica concreta aparece apenas uma vez numa aplicao, isto , quando instanciada. Isso torna fcil mudar a fbrica concreta que uma aplicao usa. Ela pode usar diferentes configuraes de objetos simplesmente trocando a fbrica concreta. Uma vez que a fbrica abstrata cria uma famlia completa de objetos, toda famlia de objetos muda de uma s vez. No nosso exemplo de construo de carros, podemos mudar de componentes do Polo para componentes do Stilo simplesmente trocando as correspondentes fbricas e recriando o carro. Ela promove a harmonia entre produtos. Quando objetos numa famlia so projetados para trabalharem juntos, importante que uma aplicao use objetos de somente uma famlia de cada vez. Abstract Factory torna fcil assegurar isso.

difcil suportar novos tipos de produtos. Estender fbricas abstratas para produzir novos tipos de produtos no fcil. Isso se deve ao fato de que a interface de Abstract Factory fixa o conjunto de produtos que podem ser criados. Suportar novos tipos de produtos exige estender a interface da fbrica, o que envolve mudar a classe AbstractFactory e todas as suas subclasses.

5. Exemplos
Nesta sesso ser apresentado 2 (dois) exemplos de aplicao do padro de projeto Abstract Factory, o exemplos foram desenvolvidos em linguagem Java e esto disponveis em sites de cdigo livre. A execuo dos exemplos so simulaes e apenas representam as situaes propostas. 5.1. Exemplo 1 Aplicao de banco de dados Esse exemplo se trata de uma pequena aplicao que pode salvar e recuperar informaes em diferentes banco de dados, apenas alterando um parmetro. No caso podemos fazer operaes sobre o MySQL e o Oracle, alm disso temos duas entidades, Livro e Pessoa, que tambm foram implementadas nas duas interfaces de banco de dados.

Figura 1. Classe Abstrata DAOFactory

Na figura 1 temos o corpo da classe abstrata DAOFactory, funcionando como a classe pai de duas outras que iro estender, o mtodo getInstance retornar a fbrica do banco passado por parmetro.

Figura 2. Estrutura de comportamento da classe LivroDAO

Figura 3. Estrutura de comportamento da classe PessoaDAO

Figura 4. Fbrica do banco de dados Oracle

Figura 5. Fbrica do banco de dados MySQL

5.1.1 Diagrama de Classe Exemplo 1

5.2 Exemplo 2 Aplicao para multi-plataforma Esse exemplo traz um programa que se adapta a plataforma e desenha sua interface conforme o estilo do sistema operacional, ele possui uma fbrica que retorna o widget responsvel em gerar o design de botes e janelas.

Figura 6. Classe Abstrata WidgetFactory

A figura 6 mostra a implementao do mtodo responsvel por retornar qual ser a fbrica da plataforma que a aplicao est rodando.

Figura 7. Fbrica de Widget do Windows

Figura 8. Fbrica de Widget do Mac

5.2.1 Diagrama de Classe Exemplo 2

6. Concluso
Padres de projeto so muito uteis para o desenvolvimento e trouxeram solues mais genricas para diversos problemas. Exemplificamos e explicamos o padro Abstract Factory, que pode ser usado juntamente com outros padres de projeto. Ele dispe uma interface para criar famlias de objetos relacionados ou dependentes, sem especificar suas classes concretas. Dentre as vantagens est a centralizao e estruturao da aplicao. Ter uma base e algo a seguir enquanto se projeta um sistema muito importante para andamento do mesmo.

Referencias
Abstract Factory | Marcos Brizeno. Disponvel em < http://brizeno.wordpress.com/category/padroes-de-projeto/abstract-factory/>. Acessado em 11/11/2013, s 20:00. Differences between Abstract Factory Pattern and Factory Method. Disponvel em < http://stackoverflow.com/questions/5739611/differences-between-abstract-factorypattern-and-factory-method>. Acessado em 12/11/2013, s 09:20. GUJ - Implementando Design Patterns com Java. Disponvel http://www.guj.com.br/articles/137>. Acessado em 11/11/2013, s 22:30. Padres de projeto Abstract Factory. Disponvel <http://naoimporta.com/blog/padroes-de-projeto-abstract-factory/>. Acessado 11/11/2013, s 22:00. Padres de projeto em .NET: Abstract Factory. Disponvel em http://www.devmedia.com.br/padroes-de-projeto-em-net-abstract-factory/3646>. Acessado em 12/11/2013, s 10:15. em < em em <