Você está na página 1de 3

Abstract Factory - Resumo

● É um dos padrões criacionais citados no GoF (Gang of Four).


● Permite produzir famílias de objetos relacionados sem especificar suas classes
concretas, através de uma única interface.
● O padrão Abstract Factory é composto por dois componentes principais:

○ Fábricas abstratas: definem uma interface para criar objetos de uma


família específica.
○ Fábricas concretas: implementam a interface da fábrica abstrata e criam
objetos concretos da família de objetos.
● Para usar o padrão Abstract Factory, você deve primeiro criar uma fábrica
abstrata para cada família de objetos que você deseja criar. A fábrica abstrata
deve definir uma interface para criar todos os objetos da família.
● Em seguida, você deve criar fábricas concretas para cada fábrica abstrata. As
fábricas concretas devem implementar a interface da fábrica abstrata e criar
objetos concretos da família de objetos.
● Para criar um objeto de uma família de objetos, você deve primeiro obter uma
referência a uma fábrica concreta. Em seguida, você pode chamar os métodos
da fábrica concreta para criar os objetos que você deseja.
● O problema que este padrão tenta resolver é da instanciação na existência de
uma família de produtos. O exemplo mais conhecido é o seguinte: você tem
elementos visuais (produtos), como Window, ScrollBar, Menu e etc. Esses
elementos visuais têm diferentes implementações para cada família de
implementação gráfica, como o Microsoft Windows, o MAC, e X do Linux.
● Objetivo / intenção: Permite a criação de famílias de objetos relacionados ou
dependentes por meio de uma única interface e sem que a classe concreta seja
especificada. Também é conhecido como Kit;
● Motivação: O objetivo em empregar o padrão é isolar a criação de objetos de
seu uso e criar famílias de objetos relacionados sem ter que depender de suas
classes concretas. Isto permite novos tipos derivados de ser introduzidas sem
qualquer alteração ao código que usa a classe base;
● Aplicabilidade: Cenários onde uma família de produtos ou classes precisa ser
instanciado, sem dependência de suas classes concretas, como no exemplo do
livro, onde você tem elementos visuais (produtos), como Window, ScrollBar,
Menu e etc. Esses elementos visuais têm diferentes implementações para cada
família de implementação gráfica, como o Microsoft Windows, o MAC, e X do
Linux;
● Benefícios:
○ Independência da implementação: o padrão Abstract Factory permite que
seu código seja independente da implementação específica das classes
de objetos que ele usa. Isso pode facilitar a manutenção e a atualização
do código.
○ Flexibilidade: o padrão Abstract Factory permite que você crie famílias de
objetos de forma flexível. Você pode adicionar ou remover classes de
objetos da família sem ter que alterar o código do cliente.
○ Reuso: o padrão Abstract Factory pode ajudar a promover o reuso de
código. Você pode criar fábricas abstratas para famílias de objetos
comuns e reutilizar essas fábricas em diferentes projetos.
○ Troca de famílias de produtos com facilidade: A classe de uma fábrica
concreta aparece apenas uma vez em um aplicativo, ou seja, onde ela é
instanciada. Isso facilita a alteração da fábrica concreta usada por um
aplicativo. Ele pode usar várias configurações de produto simplesmente
alterando a fábrica concreta. Como uma fábrica abstrata cria uma família
completa de produtos, toda a família de produtos muda de uma vez.
○ Promoção da consistência entre os produtos: Quando os objetos de
produto em uma família são projetados para funcionar em conjunto, é
importante que um aplicativo use objetos de apenas uma família por vez.
AbstractFactory torna isso fácil de implementar.
● Desvantagens:
○ Complexidade: o padrão Abstract Factory pode adicionar complexidade
ao seu código. Você precisa criar fábricas abstratas e fábricas concretas,
além de manter as interfaces e implementações dessas classes.
○ Dependência de fábricas: seu código fica dependente das fábricas
concretas. Isso pode limitar a flexibilidade do seu código, pois você pode
não ser capaz de usar fábricas diferentes sem alterar o código do cliente.
○ Dificuldade de teste: pode ser difícil testar o código que usa o padrão
Abstract Factory. Você precisa testar cada fábrica concreta, além do
código do cliente.
○ Difícil suportar novos tipos de produtos: Estender fábricas abstratas para
produzir novos tipos de produtos não é fácil. Isso porque a interface
AbstractFactory fixa o conjunto de produtos que podem ser criados. O
suporte a novos tipos de produtos requer a extensão da interface de
fábrica, o que envolve alterar a classe AbstractFactory e todas as suas
subclasses.
Quando usar
● Quando o sistema deve ser independente em termos de como seus objetos
são criados, compostos e representados.
● Quando uma família de objetos relacionados precisa ser usada em conjunto.
● Quando você deseja fornecer uma biblioteca de objetos que não mostra
implementações, mas apenas expõe interfaces.
● Quando o sistema precisa ser configurado com uma das várias famílias de
objetos.

Você também pode gostar