Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Globale Variable - Definition (https://www.delphipraxis.net/160469-globale-variable-definition.html)

s.h.a.r.k 14. Mai 2011 21:29

AW: Globale Variable - Definition
 
Ich hab das immer so :stupid:
Delphi-Quellcode:
TSingletonClass = class(TObject)
private
  class var FInstance;
  class procedure Init();
  class procedure Finalize();
  constructor Create(); reintroduce;
public
  class function GetInstance(): TSingletonClass;
  destructor Destroy();
end;

function ShortcutName(): TSingletonClass;

implementation

class procedure TSingletonClass.Init();
begin
  { ... }
end;

class procedure TSingletonClass.Finalize();
begin
  { ... }
end;

class function TSingletonClass.GetInstance(): TSingletonClass;
begin
  if (not Assigned(TSingletonClass.FInstance)) then
    TSingletonClass.FInstance := TSingletonClass.Create();
  Resul := TSingletonClass.FInstance;
end;

function ShortcutName(): TSingletonClass;
begin
  Result := TSingletonClass.GetInstance();
end;

initialization
  TSingletonClass.Init();

finalization
  TSingletonClass.Finalize();
Bitte aber die ShortcutName()-Methode umbenennen ;)

omata 14. Mai 2011 21:33

AW: Globale Variable - Definition
 
gdBK sollte aber initialisiert werden!

Zitat:

Zitat von himitsu (Beitrag 1100835)
Delphi-Quellcode:
function dBK: TdBK;
begin
  if not Assigned(gdBK) then
    gdBK := TdBK.Create;
  Result := gdBK;
end;

initialization
  gdBK:=nil;

finalization
  gdBK.Free;

end.


Wolfgang Mix 14. Mai 2011 21:36

AW: Globale Variable - Definition
 
Es ist zwar schon spät, aber fehlt da nicht ein ELSE-Teil?

s.h.a.r.k 14. Mai 2011 21:37

AW: Globale Variable - Definition
 
Wo genau? Ich glaube aber nein. Das Objekt muss ja immer zurückgegeben werden. Wenn es bisher nur noch nicht existiert, dann muss es vorher noch erzeugt werden.

Namenloser 14. Mai 2011 23:39

AW: Globale Variable - Definition
 
@s.h.a.r.k: So ähnlich mach ich es auch. Aber sollte nicht der Destruktor auch privat sein?

himitsu 15. Mai 2011 00:09

AW: Globale Variable - Definition
 
Zitat:

Zitat von omata (Beitrag 1100840)
gdBK sollte aber initialisiert werden!

Globale Variablen und Variablen in Objekten werden immer automatisch initialisiert. (mit 0 / nil / #0 / '' )

Nur bei den lokalen Variablen sieht das anders aus, denn dort wird es aus Performancegründen oftmals nicht gemacht (außer bei String dyn. Array und Interface)
und bei vielem Anderem, was sonst noch von irgendwo anders herkommt (z.B. GetMem und Co.).

s.h.a.r.k 15. Mai 2011 04:43

AW: Globale Variable - Definition
 
Zitat:

Zitat von NamenLozer (Beitrag 1100853)
@s.h.a.r.k: So ähnlich mach ich es auch. Aber sollte nicht der Destruktor auch privat sein?

So weit ich weiß geht das nicht. Hatte da schon viel probiert. Aber so ein richtiges Singleton Pattern kann Delphi leider nicht.

himitsu 15. Mai 2011 07:54

AW: Globale Variable - Definition
 
Private kann der Destructer überhaupt nicht sein.
Denn wir überschreiben ja diesen und ein Nachfahre möchte dieses auch gerne tun können, was mit Private nicht möglich wäre :zwinker:

Aber Protected wäre ein gutes Fleckchen dafür.

Namenloser 15. Mai 2011 14:18

AW: Globale Variable - Definition
 
Zitat:

Zitat von himitsu (Beitrag 1100868)
Private kann der Destructer überhaupt nicht sein.
Denn wir überschreiben ja diesen und ein Nachfahre möchte dieses auch gerne tun können, was mit Private nicht möglich wäre :zwinker:

Aber Protected wäre ein gutes Fleckchen dafür.

Hmm ja, ich habe dafür wahrscheinlich auch protected genommen. Private vermeide ich eher, weil jeder, der schon mal versucht hat, gewisse VCL-Klassen zu erweitern, weiß, wie ärgerlich es ist, wenn man später wider Erwarten doch noch mal Zugriff auf eine private Deklaration braucht...

sx2008 15. Mai 2011 14:19

AW: Globale Variable - Definition
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1100867)
Aber so ein richtiges Singleton Pattern kann Delphi leider nicht.

Ist aber nicht schlimm oder sogar eher positiv zu sehen, denn wenn das Singleton Pattern gehäuft in einer Anwendung auftritt führt es zu negativen Effekten (z.B. mangelnde Testbarkeit, erschwerte Fehlersuche, starke Kopplung zwischen den Units,...).

Die Lösung der Probleme mit den globalen Variablen und Singleton bietet die Dependency Injection.
Es braucht aber einige Wochen oder Monate bis man es begriffen und akzeptiert hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz