Singleton

Le Singleton est un patron de conception utilisé pour restreindre l’instanciation d’une classe à un seul objet.

Utilisation

L’objectif du Singleton est de cacher le constructeur de la classe en le déclarant dans la partie privée. La classe contient une variable de classe (class var). La variable est définie pour une classe plutôt qu’une instance de classe. Cette variable est alors partagée par toutes les instances de cette classe.
Une méthode statique est utilisée pour récupérer l’instance de la classe. Le premier coup l’objet est créé.

Exemple

Tout d’abord la déclaration de la classe Singleton.

type
  TSingleton = class
  strict private
    FID: integer;
    class var FInstance: TSingleton;
    constructor Create;
  public
    class function Instance: TSingleton;
    property ID: integer read FID;
  end;

Ensuite le constructeur de la classe.

constructor TSingleton.Create;
begin
  inherited Create;
  FID := Random(50) + 1;
  Writeln('Création du singleton, FID = ', FID);
end;

Enfin, la fonction ci-dessous retourne l’instance de la classe. Elle contrôle la création afin de la rendre unique.

class function TSingleton.Instance: TSingleton;
begin
  if not Assigned(FInstance) then
  begin
    FInstance := Create;
  end
  else
  begin
    Writeln('Singleton déjà créé, FID = ', FInstance.ID);
  end;
 
  Result := FInstance;
end;

Ci-dessous le code utilisant cette classe. La première fois le Singleton est créé, la seconde fois, l’instance déjà existante est retournée.

var
  Single: TSingleton;
begin
  try
    Single := TSingleton.Instance;
    Single := TSingleton.Instance;
 
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*