Crèation d'un singleton

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 768 fois - Téléchargée 35 fois

Contenu du snippet

Crèation d'un objet Singleton

utilisation

s1 := TSingleton.Create;
s2 := TSingleton.Create;
ShowMessage(s1.Text);
s2.Text := 'Pour finir !!';
ShowMessage(s1.Text);
s2.Free;
s1.Free;

Source / Exemple :


interface

type
  TSingleton = class
  private
    FText: string;
  public
    procedure FreeInstance; override;
    class function NewInstance: TObject; override;
    class function RefCount: Integer;
    property Text: string read FText write FText; // pour tester
  end;

implementation

var
  TheInstanceOfSingleton: TObject = nil;
  SingletonRefCount: Integer = 0;

procedure TSingleton.FreeInstance;
begin
  Dec(SingletonRefCount);
  if (SingletonRefCount = 0) then
  begin
    TheInstanceOfSingleton := nil;
    inherited FreeInstance;
  end;
end;

class function TSingleton.NewInstance: TObject;
begin
  if not Assigned(TheInstanceOfSingleton) then
  begin
    TheInstanceOfSingleton := inherited NewInstance;
    TSingleton(TheInstanceOfSingleton).Text := 'Dans un premier temps';
  end;
  Result := TheInstanceOfSingleton;
  Inc(SingletonRefCount);
end;

class function TSingleton.RefCount: Integer;
begin
  Result := SingletonRefCount;
end;

A voir également

Ajouter un commentaire Commentaires
Messages postés
5
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
7 mars 2011

Ta methode de singleton ne fonctionne pas avec les dérivés de TComponent, j'ai une erreur de nom dupliqué à l'initialisation de 2 objects.

P@sNox,
Messages postés
110
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
19 février 2009

c'est vrai que c'est un peu déroutant de voir le create de TObject vide. Tous est géré par le newInstance dans un TObject.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Autant pour moi, tu as mille fois raison.
J'étais persuadé qu'il fallait surcharger la méthode Create.
Et cela est d'autant plus déroutant que la méthode create de TObject est ainsi implémentée :
constructor TObject.Create;
begin
end;
Rien de plus...
Messages postés
110
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
19 février 2009

Si je prend

s1:= TSingleton.create;
s2:= Tsingleton.create;

s1 et s2 on les même adresse mémoire.
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
ok ! thanks delphiprog !
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.