Abstract Factory para Famílias de Produtos
Crie famílias de objetos relacionados, como componentes de interface por plataforma, com Abstract Factory.
Abstract Factory para Famílias de Produtos é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
A intenção da Fábrica Abstrata
A Fábrica Abstrata fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Ela garante que os produtos de uma mesma fábrica sejam compatíveis.
O problema: famílias de produtos inconsistentes
Sem a Fábrica Abstrata, você poderia misturar um botão do Windows com uma caixa de seleção do Mac. O padrão garante que todos os produtos venham da mesma fábrica, assegurando consistência visual ou comportamental.
Interface da Fábrica Abstrata
Defina uma interface com um método de criação para cada produto da família. Cada fábrica concreta implementa todos os métodos para uma variante.
public interface UIFactory {
Button createButton();
Checkbox createCheckbox();
TextField createTextField();
}Fábricas concretas
Cada fábrica concreta cria todos os produtos de uma plataforma ou tema. O código cliente referencia apenas a interface, não as fábricas concretas.
public class WindowsUIFactory implements UIFactory {
public Button createButton() { return new WindowsButton(); }
public Checkbox createCheckbox() { return new WindowsCheckbox(); }
public TextField createTextField() { return new WindowsTextField(); }
}
public class MacUIFactory implements UIFactory {
public Button createButton() { return new MacButton(); }
public Checkbox createCheckbox() { return new MacCheckbox(); }
public TextField createTextField() { return new MacTextField(); }
}Interfaces abstratas dos produtos
Cada tipo de produto tem sua própria interface. Os produtos concretos a implementam para cada plataforma. O código cliente trabalha com o produto abstrato, não com o produto concreto.
public interface Button { void render(); void onClick(); }
public interface Checkbox { void render(); boolean isChecked(); }
public interface TextField { void render(); String getValue(); }Cliente usando a fábrica
O cliente recebe uma fábrica por meio de seu construtor. Ele chama métodos da fábrica para criar componentes e os utiliza por meio de interfaces abstratas de produto — completamente desacoplado das classes concretas.
public class Application {
private final UIFactory factory;
public Application(UIFactory factory) { this.factory = factory; }
public void buildUI() {
Button btn = factory.createButton();
Checkbox cb = factory.createCheckbox();
btn.render();
cb.render();
}
}Escolhendo a fábrica em tempo de execução
Selecione a fábrica concreta com base no ambiente ou na configuração e injete-a. O restante da aplicação nunca menciona classes específicas da plataforma.
String os = System.getProperty("os.name").toLowerCase();
UIFactory factory = os.contains("mac") ? new MacUIFactory() : new WindowsUIFactory();
new Application(factory).buildUI();Adicionando um novo produto à família
Adicionar um novo produto (por exemplo, Slider) exige atualizar a interface da fábrica abstrata e todas as fábricas concretas — uma desvantagem do padrão.
public interface UIFactory {
Button createButton();
Checkbox createCheckbox();
Slider createSlider(); // new product — must update ALL factories
}Fábrica Abstrata versus Método de Fábrica
O Método de Fábrica cria um produto por meio de subclasses. A Fábrica Abstrata cria uma suíte de produtos por meio de composição. A Fábrica Abstrata normalmente é implementada usando um conjunto de métodos de fábrica.
Fábrica Abstrata para controladores de banco de dados
Uma fábrica abstrata ConnectionFactory pode produzir objetos Connection, Statement e ResultSet. Alterne entre MySQL e PostgreSQL mudando a fábrica.
public interface DBFactory {
Connection createConnection();
Statement createStatement();
}
public class MySQLFactory implements DBFactory { ... }
public class PgFactory implements DBFactory { ... }Fábrica Abstrata com perfis do Spring
No Spring Boot, defina um bean UIFactory de forma diferente para cada perfil: a aplicação sempre injeta UIFactory; o Spring resolve a fábrica concreta correta para o perfil ativo.
@Configuration
@Profile("mac")
public class MacConfig {
@Bean UIFactory uiFactory() { return new MacUIFactory(); }
}Garantindo a consistência
O principal benefício: uma fábrica produz apenas produtos compatíveis. Ao utilizar a Fábrica Abstrata corretamente, nunca será possível obter acidentalmente uma caixa de seleção do Mac combinada com um botão do Windows.
Verificação rápida
O que a Fábrica Abstrata garante que o Método de Fábrica não garante?
Recapitulação
A Fábrica Abstrata cria famílias de objetos relacionados por meio de uma interface comum. Troque famílias inteiras de produtos alterando a fábrica. É ideal quando os produtos precisam ser consistentes, mas adiciona sobrecarga ao incluir novos tipos de produto.
Perguntas Frequentes
A aula “Abstract Factory para Famílias de Produtos” é grátis?
Sim — o texto completo de “Abstract Factory para Famílias de Produtos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Abstract Factory para Famílias de Produtos”?
Crie famílias de objetos relacionados, como componentes de interface por plataforma, com Abstract Factory. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Abstract Factory para Famílias de Produtos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Singleton: Implementações Seguras para Threads
- Padrão Factory Method
- Abstract Factory para Famílias de Produtos
- Padrão Builder com API Fluente