🧱 Padrão Builder em Delphi

Construa objetos complexos passo a passo com flexibilidade e clareza

✅ Definição

Builder é um padrão criacional que separa a construção de um objeto complexo da sua representação, permitindo que o mesmo processo de construção crie diferentes representações.

💡 Cenário prático

Imagine um sistema que gera relatórios. Alguns relatórios têm cabeçalho, corpo e rodapé; outros têm apenas corpo e rodapé. Você quer montar esses relatórios de forma flexível, sem duplicar código.

Com Builder, você pode montar relatórios passo a passo, escolhendo quais partes incluir, sem alterar a estrutura geral.

📦 Estrutura de Projeto


src/
├── Builders/
│   └── TRelatorioBuilder.pas
├── Produtos/
│   └── TRelatorio.pas
└── App/
    └── Main.pas
  

🧪 Código Delphi


type
  TRelatorio = class
  private
    FConteudo: string;
  public
    procedure Adicionar(texto: string);
    function ObterConteudo: string;
  end;

procedure TRelatorio.Adicionar(texto: string);
begin
  FConteudo := FConteudo + texto + sLineBreak;
end;

function TRelatorio.ObterConteudo: string;
begin
  Result := FConteudo;
end;

type
  TRelatorioBuilder = class
  private
    FRelatorio: TRelatorio;
  public
    constructor Create;
    procedure AddCabecalho;
    procedure AddCorpo;
    procedure AddRodape;
    function GetRelatorio: TRelatorio;
  end;

constructor TRelatorioBuilder.Create;
begin
  FRelatorio := TRelatorio.Create;
end;

procedure TRelatorioBuilder.AddCabecalho;
begin
  FRelatorio.Adicionar('--- CABEÇALHO ---');
end;

procedure TRelatorioBuilder.AddCorpo;
begin
  FRelatorio.Adicionar('Conteúdo principal do relatório.');
end;

procedure TRelatorioBuilder.AddRodape;
begin
  FRelatorio.Adicionar('--- RODAPÉ ---');
end;

function TRelatorioBuilder.GetRelatorio: TRelatorio;
begin
  Result := FRelatorio;
end;

// Uso no cliente:
procedure TForm1.Button1Click(Sender: TObject);
var
  builder: TRelatorioBuilder;
  relatorio: TRelatorio;
begin
  builder := TRelatorioBuilder.Create;
  builder.AddCabecalho;
  builder.AddCorpo;
  builder.AddRodape;
  relatorio := builder.GetRelatorio;
  ShowMessage(relatorio.ObterConteudo);
end;
  

✅ Vantagens

📌 Conclusão

Builder é como montar um sanduíche: você escolhe os ingredientes e a ordem, e o resultado final é sempre bem estruturado.

⬅️ Voltar à página principal