â 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
- đ Evita mĂșltiplas instĂąncias desnecessĂĄrias
- đ§© Centraliza o acesso a dados globais
- đ Garante consistĂȘncia e controle
đ 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.