🏭 Padrão Factory Method em Delphi

Criação flexível de objetos com base em decisÔes dinùmicas

✅ Definição

Factory Method Ă© um padrĂŁo criacional que define uma interface para criar objetos, mas permite que subclasses decidam qual classe instanciar. Ele promove flexibilidade e desacoplamento entre o cĂłdigo cliente e as classes concretas.

💡 Cenário prático

Imagine um sistema de notificaçÔes que pode enviar mensagens por Email, SMS ou Push. O tipo de notificação pode variar conforme a preferĂȘncia do usuĂĄrio ou o canal disponĂ­vel.

Com Factory Method, vocĂȘ pode criar notificaçÔes dinamicamente sem precisar alterar o cĂłdigo principal. Basta trocar a classe concreta da fĂĄbrica.

📩 Estrutura de Projeto


src/
├── Interfaces/
│   └── INotificacao.pas
├── Tipos/
│   ├── TEmail.pas
│   ├── TSMS.pas
│   └── TPush.pas
├── Factory/
│   └── TNotificacaoFactory.pas
└── App/
    └── Main.pas
  

đŸ§Ș CĂłdigo Delphi


type
  INotificacao = interface
    procedure Enviar(msg: string);
  end;

  TEmail = class(TInterfacedObject, INotificacao)
    procedure Enviar(msg: string);
  end;

  TSMS = class(TInterfacedObject, INotificacao)
    procedure Enviar(msg: string);
  end;

  TNotificacaoFactory = class
    class function Criar(tipo: string): INotificacao;
  end;

procedure TEmail.Enviar(msg: string);
begin
  ShowMessage('Email enviado: ' + msg);
end;

procedure TSMS.Enviar(msg: string);
begin
  ShowMessage('SMS enviado: ' + msg);
end;

class function TNotificacaoFactory.Criar(tipo: string): INotificacao;
begin
  if tipo = 'email' then
    Result := TEmail.Create
  else if tipo = 'sms' then
    Result := TSMS.Create
  else
    raise Exception.Create('Tipo de notificação invålido');
end;

// Uso no cliente:
procedure TForm1.Button1Click(Sender: TObject);
var
  notificacao: INotificacao;
begin
  notificacao := TNotificacaoFactory.Criar('email');
  notificacao.Enviar('OlĂĄ, Savio!');
end;
  

✅ Vantagens

📌 Conclusão

Factory Method Ă© como um balcĂŁo de atendimento: vocĂȘ pede o tipo de notificação e ele entrega a instĂąncia certa, sem vocĂȘ precisar saber como ela foi criada.

âŹ…ïž Voltar Ă  pĂĄgina principal