No history yet

Introdução ao Abstract Factory

Fábricas de famílias de objetos

Imagine que você está montando um aplicativo que precisa de uma interface de usuário. Essa interface pode ter diferentes temas, como "Claro" ou "Escuro". Cada tema exige um conjunto correspondente de elementos: um botão claro, uma caixa de seleção clara, uma janela clara. Para o tema escuro, você precisa de um botão escuro, uma caixa de seleção escura e uma janela escura.

O padrão Abstract Factory resolve exatamente esse problema. Ele é um padrão de projeto criacional que permite criar famílias de objetos relacionados sem especificar suas classes concretas. Pense nele como uma "fábrica de fábricas". Ele fornece uma interface para criar vários tipos de produtos (botões, janelas), mas as fábricas reais que implementam essa interface decidem quais produtos concretos (botão claro, janela escura) serão criados.

Em vez de criar objetos diretamente, seu código pede a um objeto de fábrica para criá-los para você. Como a fábrica corresponde a um tema, todos os objetos que ela cria serão do mesmo tema.

Lesson image

Propósito e benefícios

O principal objetivo do Abstract Factory é garantir a consistência entre os produtos criados. Se você estiver usando uma fábrica de tema "Claro", pode ter certeza de que todos os elementos da interface do usuário que ela produz serão da variante "Clara". Isso evita a mistura de componentes incompatíveis, como ter um botão escuro em uma janela clara.

Outro grande benefício é o baixo acoplamento. O código que usa os produtos (o código cliente) não precisa saber como eles são criados ou quais são suas classes específicas. Ele só interage com eles por meio de interfaces abstratas. Isso torna seu sistema muito mais flexível. Se você decidir adicionar um novo tema, como "Azul", só precisará criar uma nova fábrica concreta. O código cliente não precisará ser alterado.

Lesson image

Abstract Factory vs. Factory Method

É comum confundir o Abstract Factory com outro padrão criacional, o Factory Method. Embora relacionados, eles resolvem problemas em escalas diferentes.

O Factory Method é sobre a criação de um único objeto. Ele define um método para criar um objeto, mas deixa para as subclasses decidirem qual classe concreta instanciar. Geralmente, é implementado como um único método em uma classe.

O Abstract Factory, por outro lado, trata da criação de famílias de objetos relacionados. Ele é implementado como um objeto inteiro com um conjunto de métodos de fábrica para criar cada produto da família. Enquanto o Factory Method usa herança para variar o produto criado, o Abstract Factory usa composição: o código cliente trabalha com diferentes fábricas concretas para obter diferentes famílias de produtos.

CaracterísticaFactory MethodAbstract Factory
PropósitoCriar um único objetoCriar uma família de objetos relacionados
ImplementaçãoUm método em uma classeUm objeto com múltiplos métodos de criação
FocoHerançaComposição
EscopoClasseObjeto

Essencialmente, você pode pensar que as Abstract Factories são frequentemente compostas por vários Factory Methods. Cada método na interface da fábrica abstrata é responsável por criar um tipo de produto e age como um método de fábrica.

Quiz Questions 1/5

Qual é o principal objetivo do padrão de projeto Abstract Factory?

Quiz Questions 2/5

Ao desenvolver uma interface de usuário com temas (ex: Claro e Escuro), qual problema o Abstract Factory resolve para garantir a consistência visual?

Ao agrupar a criação de objetos relacionados, o Abstract Factory ajuda a construir sistemas robustos e fáceis de manter, onde os componentes são sempre consistentes entre si.