Tags: , , , | Categories: Padrões de Projeto Posted by Rafael on 17/11/2010 00:30 | Comentários (1)

Pessoal, depois de um longo tempo impossibilitado de escrever, venho falar sobre o nosso primeiro dos cinco padrões de criação, o Abstract Factory, também conhecido como Kit.

A definição do padrão Abstract Factory, segundo o livro Padrões de Projeto - Soluções reutilizáveis de software orientado a objetos, escrito pelos integrantes da "Gang of Four" ou "GoF" é a seguinte: "Fornecer uma interface para a criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.". A definição é auto-explicativa. Utilizamos o padrão Abstract Factory quando queremos construir um conjunto de classes e fornecer apenas a interfaces de acessos às mesmas, não as implementações propriamente ditas, principalmente quando um sistema deve ser independente de como seus objetos são criados. Ou então, quando você precisar garantir que um conjunto de objetos deve ser utilizado em conjunto.

Existem diversas maneiras de implementarmos o padrão Abstract Factory. Demonstrarei apenas uma, bem simplificada, para facilitar o entendimento. A seguir está o diagrama de classes e o código gerado na linguagem C# pode ser baixado aqui: AbstractFactory.zip (30,20 kb)

Consideremos que queremos criar uma aplicação que instancia objetos de acordo com o ambiente onde esteja rodando (web, stand-alone ou mobile). Para facilitar o nosso exemplo, essa informação estará no App.config do aplicativo, mas poderia estar em qualquer outro lugar ou ser consumida de qualquer outra forma.

Note que, na classe Cliente, não sabemos qual é o atual ambiente no qual a aplicação está rodando, apenas solicitamos a criação de um TextBox e de um Botão, através da instância retornada pela Factory. Desta maneira, não nos preocupamos com o "como" os objetos são implementados, apenas nos preocupamos em seguir o contrato estabelecido pela interface, mantendo implementação dos objetos restrita.

Se definirmos o valor da chave ambiente no App.config como web, temos a seguinte saída na aplicação Console:

Da mesma maneira, se alterarmos o valor da chave ambiente do App.config para standalone, temos a seguinte saída:

Não diferente, alterando para mobile, temos o seguinte:

Esse é um dos padrões de projeto mais utilizados por arquitetos e desenvolvedores. Seu conhecimento é essencial para quem almeja dominar o mundo dos Padrões de Projeto. O padrão Abstract Factory pode ser combinado com outros padrões, como o padrão Singleton ou Prototype. Abordarei a integração entre esses padrões assim que tivermos uma visão de geral de cada padrão, para facilitar o entendimento.

Padrões de Projeto, como citei anteriormente, não são implementados de uma única maneira. No nosso exemplo, utilizei interfaces no código C#, o que achei mais apropriado, pois não havia implementação, apenas queria estabelecer um contrato entre partes (classes). Porém, nada me impediria de, ao invés de utilizar interfaces, utilizar classes abstratas. Ao invés das classes concretas implementarem as interfaces, elas poderiam herdar o comportamento das classes abstratas. Usualmente, utilizamos interfaces quando não temos implementações padrão, e utilizamos classes abstratas quando temos pelo menos uma implementação padrão, que deve ser herdada pelas classes concretas. Essa abordagem é arquitetural, e foge do nosso foco que é aprender sobre padrões de projeto. O que eu quero deixar claro é que, não importa "o como" implementamos o padrão, desde que a implementação respeite o princípio do padrão, propriamente dito.

No próximo post sobre Padrões de Projeto, abordaremos o padrão Adapter, um padrão estrutural, também muito utilizado, mas não tanto quanto o padrão Abstract Factory.

Espero que esse exemplo simples tenha ajudado vocês de alguma forma.

Até a próxima!

Comentários

naplesairportprivatetransfer.com on 05/04/2014 18:54 Pingback from naplesairportprivatetransfer.com

Big Win Football Hack Tutorial | Naples Airport Private Transfer
Os comentários estão fechados