Sobre O Padrão Abstract Factory Assinale A Alternativa Correta
O Padrão Abstract Factory na Prática
Você provavelmente está estudando para uma prova ou concurso e se deparou com essa questão sobre o padrão Abstract Factory. Vou explicar como ele realmente funciona, além do que os livros costumam dizer. O Abstract Factory é um padrão criacional que consiste em um interface (ou classe abstrata) que cria famílias de objetos relacionados sem especificar as classes concretas desses objetos. A ideia central é ter uma fábrica abstrata com métodos para criar cada tipo de produto, e depois classes concretas que implementam essa fábrica, cada uma responsável por um conjunto específico de produtos compatíveis entre si. Diferente do Factory Method, que tem apenas um método de criação, o Abstract Factory expõe vários métodos, cada um retornando um tipo diferente de objeto. Por exemplo, uma fábrica pode ter um método CreateButton(), outro CreateCheckbox(), outro CreateTextField(), e todas essas factories concretas retornam produtos que formam uma família coerente — como botões e checkboxes do Windows versus os mesmos componentes do macOS.
Quando cai essa pergunta em provas, a alternativa correta geralmente gira em torno de três ideias: o padrão oferece uma interface para criar famílias de objetos relacionados, ele encapsula a criação de múltiplos tipos de produtos interdependentes, e ele permite substituir famílias inteiras de produtos Trocando apenas a factory concreta instanciada no ponto de composição da aplicação. Um detalhe que pouca gente observa: o Abstract Factory não é sobre simplificar código. Na verdade, ele frequentemente aumenta a quantidade de classes. Já implementei isso em um sistema onde tínhamos que suportar quatro temas visuais diferentes para um framework desktop. Acabei com uma interface abstrata, quatro factories concretas, e talvez doze classes de produto. O ganho foi a capacidade de trocar o tema inteiro com uma única mudança na configuração. A desvantagem foi que adicionar um novo tema exigia modificar pelo menos cinco arquivos novos. Outro ponto que costuma cair na questão é a relação com o princípio Aberto-Fechado. O Abstract Factory te permite extender o sistema adicionando novas famílias de produtos sem modificar o código cliente. Mas ele não lida bem com a adição de novos tipos de produto dentro de uma família existente — isso exigiria mudar a interface da fábrica abstrata e todas as suas implementações, o que é uma limitação séria e muitas vezes subestimada.
Na minha experiência, o erro mais comum é confundir Abstract Factory com Builder ou com Factory Method. Builder foca em construir um objeto complexo passo a passo. Factory Method usa herança e um único método de criação. Abstract Factory usa composição de factories e lida com famílias de produtos. Se a questão menciona "famílias de objetos relacionados", a resposta quase sempre é Abstract Factory.

Galeria
-
Factory-vs-Abstract-Factory-Pattern -
Abstract Factory Pattern - GeeksforGeeks -
What are the differences between Abstract Factory and Factory design ... -
Patron Abstract Factory - Programación Orientada a Objetos OOP IEC61131 ...