VB.NET - Design Patterns - Factory
Estou voltando ao assunto Design Patterns. Quando digo que estou voltando é porque já tratei do assunto nos artigos:
1- Padrões de Projeto - Design Patterns
2- Padrões de Projeto : O modelo MVC - Model View Controller
Os padrões de projeto não devem ser visto como a salvação universal para o problema do desenvolvimento de software nem ser posto de lado como uma coisa inútil que não serve para nada. Eles apenas fornecem uma relação de soluções comuns que são usadas no mundo real das aplicações comerciais, soluções que já foram provadas e aprovadas em diferentes projetos de software.
Conhecer os padrões de projeto pode ser muito interessante mas saber como aplicá-los aos seus projetos é que realmente vai fazer a diferença.
Podemos considerar que a ideia original de Design Patterns surgiu com Christopher Alexander quando ele propôs a criação de catálogos de padrões para arquitetura.(Ele era Engenheiro Civil). Suas publicações a respeito foram:
Com a palavra Christopher Alexander :
"Um padrão descreve um problema que ocorre inúmeras\par vezes em determinado contexto, e descreve ainda a solução para esse problema, de modo que essa solução possa ser utilizada sistematicamente em distintas situações." [Alexander78]
A seguir algumas definições para o assunto encontradas na internet:
“Padrões de projeto são soluções elegantes e reutilizáveis para problemas recorrentes que encontramos diariamente no processo de desenvolvimento de aplicativos para o mundo real. Eles tratam da concepção e da interação entre objetos, definindo ao mesmo tempo um padrão de comunicação que é compartilhado por toda a equipe de desenvolvimento.” http://www.oodesign.com.br/patterns/
“Um padrão de projeto é uma estrutura recorrente no projeto de software orientado a objetos. Pelo fato de ser recorrente, vale a pena que seja documentada e estudada.” http://s2i.das.ufsc.br/seminarios/apresentacoes/padroes_de_projeto/text3.html
“Um padrão de projeto sistematicamente nomeia, motiva e explica um projeto genérico, que endereça um problema de projeto recorrente em sistemas orientados a objetos. Ele descreve o problema, a solução, quando é aplicável e quais as conseqüências de seu uso.”http://www.javacampinas.com.br/palestras/IntrodPadroesComJava.ppt
Essas soluções são desenvolvidas e conhecidas por especialistas, e tornam-se padrões por serem reutilizadas várias vezes em vários projetos e por terem a sua eficácia comprovada.
Este artigo vai se ater ao padrão Factory
O padrão Factory fornece uma interface para a criação de famílias de objetos correlatos ou dependentes sem a necessidade de especificar a classe concreta destes objetos.
Por exemplo , quando estamos trabalhando com uma interface e temos mais de uma implementação para esta interface, podemos utilizar uma fábrica para criar um objeto que implementa a interface; a fábrica pode selecionar a implementação que ela retorna.
A
utilização do padrão Factory é útil quando você precisa criar objetos
dinamicamente sem conhecer a classe de implementação, somente sua interface: o
padrão factory estabelece uma forma de desenvolver objetos que são responsáveis
pela criação de outros objetos.
Vejamos um exemplo prático:
No exemplo a seguir temos uma interface que define o método falaAlo(). Precisamos criar objetos AloFactory e usando o padrão Factory criamos facilmente objetos de forma dinâmica sem conhecer a classe de implementação.
1-) A interface IAloMundo que define o método falaAlo()
Public
Interface IAloMundo Sub falaAlo() End Interface |
2-) A classe EnglishAloMundo que implementa a interface IAloMundo
Public Class EnglishAloMundo |
3-) A classe SpanishAloMundo que implementa a interface IAloMundo
Public
Class SpanishAloMundo Implements IAloMundo Public Sub falaAlo() System.Console.WriteLine("Hola Mundo") End Sub End Class |
2-) A
classe GermanAloMundo que implementa a interface IAloMundo
Public
Class GermanAloMundo Implements IAloMundo Public Sub falaAlo() System.Console.WriteLine("Hallo Welt") End Sub End Class |
A classse
AloFactory implementa o padrão Factory e conforme o idioma retorna
um objeto do tipo IAloMundo.
Public
Class AloFactory Public Function CriaAloMundo(ByVal idioma As String) As IAloMundo Select idioma Case "en" Return New EnglishAloMundo Case "sp" Return New SpanishAloMundo Case "de" Return New GermanAloMundo End Select Return Nothing End Function End Class |
A representação UML para o exemplo acima é dado a seguir:
Nota: Esta representação foi obtida usando o programa Violet. Você pode pegar o programa no seguinte endereço: http://horstmann.com/violet/. Ele é originalmente feito para Java e para executá-lo você terá que ter instalado o JDK 1.4 ou 5.0 Runtime Environment. Ele é pequeno e grátis mas é muito simples mesmo. Para abrir o programa execute a seguinte linha de comando: java -jar violet-0.15.jar.
Usando o padrão factory podemos facilmente incluir novas classes concretas AloMundo na nossa classe AloFactory que pode ser criada sem que o usuário da factory tenha que saber que outra implementação foi incluída. As classes que usam as classes AloMundo somente precisam conhecer a classe Factory - AloFactory.
Este padrão é usado na versão 2.0 da ADO.NET nas classes dbProviderFactories dentre outras classes da plataforma .NET.
Para saber mais sobre dbProviderFactories leia o artigo : VB.NET 2005 - Usando factories de Provedores.
Até breve...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: