📲 Padrão Abstract Factory em Delphi

Criação de famílias de notificações relacionadas com consistência e flexibilidade

✅ 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:

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.

📦 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

📌 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.

⬅️ Voltar à página principal