🔒 Padrão Singleton em Delphi

Controle de instĂąncia Ășnica para configuraçÔes e recursos globais

🏠 Voltar às Categorias

✅ Definição

Singleton Ă© um padrĂŁo de projeto criacional que garante que uma classe tenha apenas uma instĂąncia e fornece um ponto global de acesso a ela. É Ăștil para gerenciar configuraçÔes, conexĂ”es ou recursos compartilhados.

💡 Cenário prático

Imagine que vocĂȘ estĂĄ desenvolvendo um sistema Delphi que precisa acessar configuraçÔes globais (idioma, tema, permissĂ”es). Essas configuraçÔes devem ser carregadas uma Ășnica vez e acessadas por todo o sistema.

O Singleton garante que essas configuraçÔes sejam instanciadas apenas uma vez, evitando duplicidade e inconsistĂȘncia.

📩 Estrutura de Projeto


src/
├── Config/
│   └── TConfig.pas
├── App/
│   └── Main.pas
  

đŸ§Ș CĂłdigo Delphi


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

constructor TConfig.Create;
begin
  // Inicialização privada
end;

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

procedure TConfig.LoadSettings;
begin
  ShowMessage('ConfiguraçÔes carregadas!');
end;

// Uso no cliente:
procedure TForm1.Button1Click(Sender: TObject);
begin
  TConfig.GetInstance.LoadSettings;
end;
  

✅ Vantagens

📌 Conclusão

Singleton é como um gerente de configuraçÔes: existe apenas um, e todos os módulos do sistema consultam ele. Simples, seguro e eficiente.

🧾 Exemplo Didático: Gerente de Brinquedos

Este exemplo mostra uma loja de brinquedos com um Ășnico gerente. Cada botĂŁo no formulĂĄrio chama o mesmo gerente para exibir um brinquedo diferente, demonstrando o padrĂŁo Singleton de forma lĂșdica e acessĂ­vel.

📁 Estrutura de Projeto


src/
├── Config/
│   └── uBrinquedoManager.pas
├── App/
│   └── LojaForm.pas

đŸ§Ș CĂłdigo Delphi


type
  TBrinquedoManager = class
  private
    class var FInstance: TBrinquedoManager;
    constructor Create;
  public
    class function GetInstance: TBrinquedoManager;
    procedure MostrarBrinquedo(const Nome: string);
  end;

constructor TBrinquedoManager.Create;
begin
  // Inicialização privada
end;

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

procedure TBrinquedoManager.MostrarBrinquedo(const Nome: string);
begin
  ShowMessage('Brinquedo disponĂ­vel: ' + Nome);
end;

// Uso no cliente:
procedure TLojaForm.btnCarrinhoClick(Sender: TObject);
begin
  TBrinquedoManager.GetInstance.MostrarBrinquedo('Carrinho de Corrida');
end;

🎯 Aplicação

Ao clicar nos botĂ”es "Carrinho" ou "Boneca", o mesmo gerente Ă© chamado para mostrar o brinquedo. Isso reforça o conceito de instĂąncia Ășnica, de forma divertida e intuitiva.

🔙 Quer retornar ao início do site?

🏠 Ir para Página Principal