🎓 Guia Completo – Padrões Criacionais em Delphi

Domine a arquitetura de software com exemplos práticos e explicações claras

🏠 Voltar às Categorias

🔒 Singleton

Garante que uma classe tenha apenas uma instância e fornece um ponto global de acesso a ela. Ideal para configurações, logs ou conexões únicas.

type
  TConfig = class
  private
    class var FInstance: TConfig;
    constructor Create;
  public
    class function GetInstance: TConfig;
    procedure LoadSettings;
  end;

class function TConfig.GetInstance: TConfig;
begin
  if FInstance = nil then
    FInstance := TConfig.Create;
  Result := FInstance;
end;
  

🏭 Factory Method

Define uma interface para criar objetos, mas permite que subclasses decidam qual classe instanciar. Ótimo para sistemas com múltiplos tipos de notificações.

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;

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

class function TFactory.Criar(tipo: string): INotificacao;
begin
  if tipo = 'email' then
    Result := TEmail.Create
  else if tipo = 'sms' then
    Result := TSMS.Create;
end;
  

🎨 Abstract Factory

Permite criar famílias de objetos relacionados sem especificar suas classes concretas. Ideal para sistemas com múltiplas interfaces (Windows, Mac).

type
  IButton = interface
    procedure Render;
  end;

  IGUIFactory = interface
    function CriarBotao: IButton;
  end;

  TWindowsFactory = class(TInterfacedObject, IGUIFactory)
    function CriarBotao: IButton;
  end;

  TMacFactory = class(TInterfacedObject, IGUIFactory)
    function CriarBotao: IButton;
  end;
  

🧱 Builder

Separa a construção de um objeto complexo da sua representação. Ideal para gerar relatórios, documentos ou interfaces passo a passo.

type
  TRelatorioBuilder = class
    procedure AdicionarCabecalho;
    procedure AdicionarCorpo;
    procedure AdicionarRodape;
    function GetRelatorio: string;
  end;
  

🧬 Prototype

Permite copiar objetos existentes sem depender de suas classes. Útil para duplicar configurações, formulários ou layouts.

type
  ICloneable = interface
    function Clone: TObject;
  end;

  TDocumento = class(TInterfacedObject, ICloneable)
    Titulo: string;
    function Clone: TObject;
  end;

function TDocumento.Clone: TObject;
begin
  Result := TDocumento.Create;
  TDocumento(Result).Titulo := Self.Titulo;
end;
  

🔙 Quer retornar ao início do site?

🏠 Ir para Página Principal