Abstract Factory — Design Pattern em .NET

Mais um artigo sobre Design Pattern! Lembrando, que estou traduzindo os artigos do portal DoFactory :)

No final coloquei um exemplo do projeto em .NET Core, só clonar e rodar!


Definição

Fornece uma interface para criação de família de objetos relacionados ou dependentes, sem especificar suas classes concretas.

Frequência do uso: ALTA

Diagrama de classe UML

Participantes

As classes e objetos participantes nesse pattern são:

AbstractFactory (ContinentFactory)

  • Declara uma interface para operações que criam produtos abstratos

ConcreteFactory (AfricaFactory, AmericaFactory)

  • Implementa as operações para criar objetos concretos de produtos

AbstractProduct (Herbivore, Carnivore)

  • Declara a interface para um tipo de objeto de produto

Product (Wildebeest, Lion, Bison, Wolf)

  • Defina um objeto de produto para ser criado de acordo com a factory concreta
  • Implementa a interface AbstractProduct

Client (AnimalWorld)

  • Utiliza a interface declarada pelas classes AbstractFactory e AbstractProduct

Código Estrutural em C#

Esse código estrutura demonstra o pattern AbstractFactory criando hierarquias paralelas de objetos. A criação do objeto foi abstraída e não é preciso nomes de classes em “hard-coded” no código.

Output
ProductB1 interage com ProductA1
ProductB2 interage com ProductA2

Código no mundo real em C#

O código no mundo real demonstra a criação de mundos animais para um jogo de computador utilizando diversas factories. Embora os animais criados para as factories de Continentes sejam diferentes, as interações entre os animais se mantem a mesma.

Output
Lion come Wildebeest
Wolf come Bison

FONTE: AbstractFactory em DoFactory

Projeto .NET Core

Meu Resumo

Resumindo… AbstractFactory é um pattern que abstrai as factories dos objetos. Dessa forma, você tem um nível a mais de abstração, não se tratando apenas dos objetos concretos finais, mas sim das factories que irão construí-los.

Show your support

Clapping shows how much you appreciated Khauê Viana’s story.