✅ Definição
Abstract Factory é um padrão criacional que fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Ele garante consistência entre os objetos criados e facilita a troca de estilos ou versões.
💡 Cenário prático
Imagine que você está desenvolvendo um sistema que envia notificações em diferentes canais:
- 📱 SMS
- 🔔 Push
Com Abstract Factory, você pode ter duas fábricas distintas:
- Factory Básica: cria notificações simples.
- Factory Premium: cria notificações avançadas, com templates, logs e prioridade.
- Factory Básica: cria notificações simples.
- Factory Premium: cria notificações avançadas, com templates, logs e prioridade.
📦 Estrutura de Projeto
src/
├── core/
│ ├── unNotificacao.pas
│ └── unNotificacaoFactory.pas
├── factories/
│ ├── unFactoryBasica.pas
│ └── unFactoryPremium.pas
├── notificacoes/
│ ├── email/
│ │ ├── unNotificacaoEmail.pas
│ │ └── unNotificacaoEmailPremium.pas
│ ├── sms/
│ │ ├── unNotificacaoSMS.pas
│ │ └── unNotificacaoSMSPremium.pas
│ └── push/
│ ├── unNotificacaoPush.pas
│ └── unNotificacaoPushPremium.pas
├── tema/
│ └── unTemaNotificacao.pas
└── ui/
└── unMain.pas
🧪 Código Delphi
type
INotificacao = interface
procedure Enviar;
end;
INotificacaoFactory = interface
function CriarEmail: INotificacao;
function CriarSMS: INotificacao;
function CriarPush: INotificacao;
end;
TNotificacaoEmail = class(TInterfacedObject, INotificacao)
procedure Enviar;
end;
procedure TNotificacaoEmail.Enviar;
begin
ShowMessage('Email enviado (Básico)');
end;
TFactoryBasica = class(TInterfacedObject, INotificacaoFactory)
function CriarEmail: INotificacao;
function CriarSMS: INotificacao;
function CriarPush: INotificacao;
end;
function TFactoryBasica.CriarEmail: INotificacao;
begin
Result := TNotificacaoEmail.Create;
end;
// Uso no cliente:
procedure CriarNotificacoes(factory: INotificacaoFactory);
var
email, sms, push: INotificacao;
begin
email := factory.CriarEmail;
sms := factory.CriarSMS;
push := factory.CriarPush;
email.Enviar;
sms.Enviar;
push.Enviar;
end;
✅ Vantagens
- 🔁 Troca de versão (Básica/Premium) sem alterar o código cliente
- 🧩 Consistência entre os objetos criados
- 🔒 Evita mistura de estilos incompatíveis
📌 Conclusão
Abstract Factory é como escolher um pacote de notificações: você define se quer Básico ou Premium e recebe todos os canais coordenados — sem precisar instanciar cada classe manualmente.