O Abstract Factory é um padrão de projeto criacional que permite que você (o cliente) produza famílias de objetos relacionados sem ter que especificar suas classes concretas.
Problema:
O cliente precisa de uma família de objetos, mas não sabemos quais classes concretas devem ser utilizadas. Outras famílias de objetos podem ser inseridas no software, mas isso não deve afetar o cliente. Os objetos de uma família deve ser criados juntos.
Solução:
Criar uma interface para cada produto dessa família.
Todas as famílias devem implementar essas interfaces.
Declarar uma interface da fábrica abstrata, com um método para criar cada produto da família. esses métodos retornam os tipos das interfaces dos produtos.
Pra cada variante dos produtos, criamos uma classe fábrica concreta, cujos métodos retornam esses produtos concretos.
O cliente só lida com os tipos abstratos, não se importando com as classes concretas, tanto das fábricas quando dos produtos.
As fábricas podem ser criadas de acordo com uma configuração, durante a inicialização, ou usando injeção de dependência.
Aplicabilidade:
Use o Abstract Factory quando seu código precisa trabalhar com diversas famílias de produtos relacionados, mas que você não quer depender de classes concretas daqueles produtos-eles podem ser desconhecidos de antemão ou você simplesmente quer permitir uma futura escalabilidade.
Links
Descrição
Artigo sobre o padrão de projeto Abstract Factory
Repositório
-