Entendendo os padrões de projeto a partir da análise de frameworks populares de mercado: Padrões criacionais

Boas práticas com aplicação de padrões de projetoAmplamente aceitos como exemplos de arquiteturas a serem seguidas, os modelos  conhecidos como padrões de projeto (ou design patterns como preferir…) ainda são pouco utilizados na construção de novos sistemas ou, quando utilizados, passam despercebidos. Paradoxalmente, é muito incomum encontrar softwares de ampla magnitude que não façam o uso dos padrões estudados pela “gangue dos quatro” de Erich Gamma e seus parceiros. Isso decorre do fato de que padrões de projeto são análises profundas sobre os tipos de soluções mais aplicadas sobre situações frequentes e pontuais, além do mais, o mais importante, é que se tratam de alternativas que deram certo. Assim, quanto maior o grau de conhecimento dos envolvidos com a elaboração de um determinado programa, maiores são as chances de que este atinja seu objetivo de modo mais eficiente e com menor esforço individual.

Neste artigo, e nos subsequentes, pretendo demonstrar como que se faz necessário o entendimento, ao menos superficial, do conceito dos vinte e três padrões de projetos propostos pela equipe formada por: Erich GammaRichard Helm, Ralph Johnson, John Vlissides e Addison-Wesley a partir da análise da aplicação de cada um deles sobre ferramentas populares em organizações sejam elas com fins lucrativos ou não.

Porém, antes de começar a discorrer sobre o assunto, é importante ressaltar que os padrões “Gang of Four” (GoF) são subdivididos em 3 grupos distintos: os padrões criacionais que lidam com a forma pela qual os objetos são instanciados, os padrões estruturais que dizem respeito ao modo pelo qual as classes devem se organizar e, por fim, os padrões comportamentais que tratam a forma esperada de ação e reação de determinados objetos. Tendo em mente essa organização, agora sim analisaremos casos nos quais os padrões criacionais foram aplicados.

Neste artigo lidaremos com os padrões de projeto criacionais que são respectivamente conhecidos como: Abstract factoryBuilder patternFactory methodPrototype e, Singleton que em resumo são mecanismos de controle sobre a criação de objetos. Isso significa que as classes que veremos a seguir implementam esse modelo encapsulando em si a inteligência de criação de estruturas especificas e detendo conhecimento sobre quais classes concretas que o sistema pode utilizar. Vamos lá:

Padrões criacionais

  1. Abstract Factory é um padrão de criação de classes geralmente reconhecido por um método criacional que retorna uma interface ou uma classe abstrata. Ele torna possível a criação de famílias de objetos relacionados sem especificar classes concretas. Um exemplo muito utilizado é o java.util.Calendar.getInstance().

  2. Builder é outro padrão de projeto de criação, porém o seu foco está voltado para a montagem de tipos complexos. Sua meta é separar a construção de um objeto da necessidade de respeitar os parâmetros do método construtor, ou seja, sua representação. Isso torna possível formar a instância em passos simples e abre a possibilidade de o mesmo processo gerar diferentes representações. Em geral é uma classe que implementa o padrão Builder e que possui um ou mais métodos que retornam a instância dessa classe, por exemplo, o método append() e o java.lang.StringBuilder que resulta no próprio StringBuilder.

  3. Factory Method é um padrão de projeto que consegue delegar a instanciação de uma classe para uma subclasse a partir do uso de uma interface comum. Geralmente são constituídos de métodos que geram um novo tipo concreto de objeto, como java.lang.Object.toString().

  4. Prototype é um dos padrões GOF que têm um nome que melhor lembra o seu objetivo final. Ele trata o problema de criar cópias exatas de um tipo a partir de um protótipo que nada mais é do que uma instância do próprio tipo. Em outras palavras, ele usa uma instância de uma classe para criar uma diferente, mas que possui propriedades idênticas à inicial. É disso que se tratam as classes que implementam a interface java.lang.Cloneable e fazem uso do método java.lang.Object.clone().

  5. Singleton é o último, e talvez o mais conhecido, dentre todos os padrões criacionais GOF. Diferente dos outros, seu objetivo não é a criação indiscriminada de novas instâncias, mas sim a gerência de uma única, a qual ele fornece um ponto global de acesso para uso em toda a aplicação. Em outras palavras, pode ser reconhecido a partir da existência de um método que retorna o mesmo objeto (frequentemente uma instância próprio objeto) em todas às vezes pelas quais é invocado. Um objeto que tem comportamento semelhante é o java.lang.RunTime.getRuntime(), que retorna o objeto associado a uma aplicação Java.

E fechamos aqui a primeira parte para no próximo post enfatizarmos os padrões de projeto estruturais !

Artigos relacionados:

Referências

  • oodesign.com – Coletânea de exemplos práticos com UML de padrões de projeto aplicados a linguagem Java

  • sourcemaking.com/design_patterns – Coletânea de exemplos práticos com UML de padrões de projeto aplicados a linguagem Java

Livros

  • Padrões de projeto: Soluções reutilizáveis de software orientado a objetos, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Addison-Wesley, 1995 – O livro que popularizou o catalogo de padrões para o desenvolvimento de software

  • Use a cabeça! Padrões de projetos (Design Patterns), Erich Freeman, Elisabeth Freeman, 2005 – Literatura que faz o uso de comparações na vida real e detalha comparações entre padrões semelhantes

Anúncios