Por que eu devo ler este artigo:

Os padrões criacionais permitem uma flexibilização no ato de instanciar objetos pertencentes a uma hierarquia de classes. Isso é obtido através da decomposição do problema para privilegiar uma melhor manutenção do código. Ao fazer isso, conseguimos um fraco acoplamento e uma baixa coesão, que é tudo que um código orientado a objetos necessita.

Auxilia na refatoração de código e manutenções futuras, no caso de novos requisitos impactarem diretamente numa hierarquia de classes.

Na maior parte dos projetos orientados a objetos, quase sempre teremos que lidar com famílias de objetos e a necessidade de criarmos instâncias das inúmeras classes presentes ali. Nem sempre esse processo é bem coordenado e manipulado, sobretudo se considerarmos as mudanças nos requisitos futuros do software. Desta forma, pretendemos apresentar um padrão de projeto que torna essa tarefa bem mais flexível e organizada, a fim de privilegiar a manutenção futura e decompor melhor o problema a ser tratado, promovendo um fraco acoplamento entre as classes e a baixa coesão.

Um padrão descreve uma solução para um problema que ocorre com frequência durante o desenvolvimento de software, podendo ser considerado como um par “problema/solução” (Buschmann, 2003). Projetistas familiarizados com certos padrões podem aplicá-los imediatamente a problemas de projeto, sem ter que redescobri-los (Gamma, 2000). Um padrão é um conjunto de informações instrutivas que possui um nome e que capta a estrutura essencial e o raciocínio de uma família de soluções comprovadamente bem sucedidas para um problema repetido que ocorre sob um determinado contexto e um conjunto de repercussões (Appleton, 2000).

Padrões de software podem se referir a diferentes níveis de abstração no desenvolvimento de sistemas orientados a objetos. Assim, existem padrões arquiteturais, em que o nível de abstração é bastante alto, padrões de análise, padrões de projeto, padrões de código, entre outros. As diversas categorias de padrões são discutidas a seguir. O uso de padrões proporciona um vocabulário comum para a comunicação entre projetistas, criando abstrações num nível superior ao de classes e garantindo uniformidade na estrutura do software (Gall,1996). Além disto, eles atuam como blocos construtivos a partir dos quais, projetos mais complexos podem ser construídos (Gamma, 2000).

Diversos autores têm proposto centenas de padrões nas mais diversas áreas de aplicação. Esses padrões são descobertos após a abstração de fatores comuns em diversos pares problema-solução, podendo-se situar em várias faixas de escala e abstração. Existem padrões de domínio específico, como por exemplo, para sistemas multimídia educativos e também padrões independentes de domínio, como por exemplo padrões para projeto de interface. Há padrões que ajudam a estruturar um sistema de software em subsistemas e outros que ajudam a implementar aspectos de projeto particulares.

Olhando mais de perto para muitos padrões, percebe-se que um padrão resolve um problema, mas sua aplicação pode gerar outros problemas, que podem ser resolvidos por outros padrões. Em geral não existem padrões isolados: um padrão pode depender de outro no qual esteja contido, ou das partes que ele contém, ou ser uma variação de outro, ou ser uma combinação de outros. De maneira geral, um padrão e seus variantes descrevem soluções para problemas muito similares, que variam em algumas das influências envolvidas.

Dentre os inúmeros padrões de projeto, apresentaremos neste artigo o Abstract Factory, classificado na categoria dos de Criação (Horstmann, 2007), os quais são responsáveis por abstrair o processo de criação de objetos a partir de instanciação de classes. Trata-se de um padrão extremamente útil no trato da instanciação de famílias de objetos. Para que sua implementação seja viabilizada, utilizaremos também outro padrão chamado de Factory Method importante principalmente na instanciação de objetos numa hierarquia de classes, sem que a variação de seus participantes influencie no seu processo.

...
Quer ler esse conteúdo completo? Tenha acesso completo