Abstract Factory

Lucas De Oliveira Gonçalves
2 min readFeb 26, 2018

--

Seguindo o tema Design Patterns hoje irei falar sobre o Abstract Factory. O Abstract Factory é um Padrão de Criação que disponibiliza uma interface (Abstract Factory) utilizada para criar famílias de objetos (Products) relacionados ou inter-dependentes entre si, sem a necessidade de especificar suas classes concretas.

Estrutura do Abstract Factory

Conforme a imagem acima o Abstract Factory é composto pelos seguintes papéis:

  • Abstract Factory: é uma interface onde ficam declaradas as operações de criação de abstrações dos produtos (abstract product);
  • Concrete Factory: são classes que implementam as operações declaradas na interface (abstract factory), sendo responsáveis pela criação dos objetos (concrete product), representam as famílias de produtos que serão consumidas pelo client;
  • Abstract Product: declara uma interface para o objeto (concrete product);
  • Concrete Product: implementa a interface do abstract product, representa o objeto (concrete product) que foi criado a partir da concrete factory correspondente;
  • Client: é o sistema que utiliza a interface (abstract factory) para ter acesso aos produtos (abstract product);

Pros e contras

O padrão Abstract Factory isola as classes concretas dos produtos. O cliente tem acesso apenas as interfaces abstratas que representam os produtos. Isto se dá por que a Abstract Factory encapsula a responsabilidade e o processo de criação dos objetos delegando esta responsabilidade para as Concrete Factory e retornando para o cliente apenas uma interface do produto. Isso facilita a manutenibilidade do código.

A classe da Concrete Factory aparece no Client apenas quando é instanciada. Isto faz com que seja bastante fácil trocar a familia de produtos que se deseja manipular no Client, para isto basta instanciar uma Concrete Factory diferente.

O Client deverá seguir funcionando normalmente, pois ele interage com a interface do Abstract Product e ao substituir uma Concrete Factory por outra o cliente estará recebendo um Concrete Product diferente mas que respeita a interface Abstract Product.

Por fim, o principal ponto negativo do padrão Abstract Factory e o fato de que caso seja necessário adicionar um novo Product será preciso modificar a interface da Abstract Factory e todas suas sub classes.

Espero que tenham gostado artigo, o próximo Pattern que irei trazer é o Builder. Por último deixo o link do meu repositório do Github onde coloco os códigos que desenvolvi nestes estudos sobre os Patterns. Espero que seja útil.

Até a próxima :)

--

--

Lucas De Oliveira Gonçalves

Developer, martial arts practitioner, music fan and very curious guy.