quarta-feira, 16 de outubro de 2013

Padrões de Projetos : Abstract Factory

Olá amigos, hoje vamos aprender mais um padrão de projeto, o ABSTRACT FACTORY


Para demonstrar esse padrão primeiro preciso apresentar "o problema":


Primeiro vamos criar um projeto Console Application


Vamos criar uma classe abstrata chamada DBConnection

Em seguida criar um método abstrato Open();



Em seguida vamos criar uma classe SQLConnection implementando a classe abstrata DBConnection.
Em seguida sobrescrevemos o método Open() como na imagem abaixo.



Agora vamos criar uma outra classe abstrata chamada DBCommand.

E incluir um método abstrato Execute().




Agora criamos uma classe SQLCommand implementando a classe abstrata DBCommand
Em seguida sobrescrevemos o método Execute como na imagem abaixo.




Agora vamos utilizar as nossas classes SQLConnection e SQLCommand em nosso programa.


O resultado final é :



Bom perceba que temos um grande problema aqui, estamos totalmente acoplados nas classes SQLConnection e SQLCommand, caso precisemos trocar o nosso banco de dados para ORACLE, termos que trocar todos os nossos objetos de nosso projeto e suas utilizações.

Para resolver isso vamos utilizar o padrão Abstract Factory, onde teremos uma "fábrica" que vai criar os objetos e devolver somente a instancia de acordo com a fábrica utilizada.

Vamos implementar o padrão.


Primeiro criamos uma classe abstrata DBFactory
Nela adicionamos dois métodos, o createConnection e o CreateCommand,

Perceba que o método abstrato createConnection retorna um DBConnection, ou seja, poderá retornar qualquer objeto que implemente essa classe
E a mesma situação para o método createCommand.




Agora criamos a nossa fabrica para a família de objetos SQL.

Nela implementamos a classe abstrata DBFactory.
E em seguida sobrescrevemos os métodos createConnection e createCommand.

O método createConnection retorna uma instancia da classe SQLConnection, e o método createCommand retorna uma instancia da classe SQLCommand.


Nosso diagrama de classe ficou da seguinte maneira.



Agora vamos alterar o nosso programa principal para utilizar a fabrica.

Perceba que agora não criamos a Instancia da classe SQLCommand ou SQLConnection, quem faz isso é a Factory.

E o resultado final.



Criei as mesmas classes para o ORACLE para ilustrar a facilidade que teremos para modificar a conexão com o banco de dados.

Perceba na imagem abaixo que a única coisa que mudou em nosso código foi a instancia da classe OracleFactory().

Com isso deixamos o sistema escalável  e de fácil manutenção, sem falar no baixo nível de acoplamento, pois o programa cliente não sabre o que é o SQL ou ORACLE , apenas utiliza.

Galera por hoje é isso, peque aqui o projeto completo.

Espero que tenham gostado e até a próxima.



-- Lucas 6:37 - 38


Um comentário: