Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi [Tutorial] Singletons in Delphi (https://www.delphipraxis.net/146936-%5Btutorial%5D-singletons-delphi.html)

MisterNiceGuy 29. Jan 2010 17:27


[Tutorial] Singletons in Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle miteinander,

ich habe heute mal ein kurzes Tutorial über Singletons in Delphi geschrieben.
Das ganze umfasst eine kurze Erklärung über den Begriff "Singleton" und eine
Beispielimplementierung. Ich habe versucht das ganze so einfach wie möglich zu
halten :)

Runterladen kann man das ganze hier und auf meinem Blog: klick

Aphton 29. Jan 2010 18:27

Re: [Tutorial] Singletons in Delphi
 
Kurz und würzig, bravo und danke!

MfG

freak4fun 29. Jan 2010 18:30

Re: [Tutorial] Singletons in Delphi
 
Müsste das auf deiner Seite nicht download (pdf, 17kb) statt download (pfd, 17kb) heißen? :stupid:

Teekeks 29. Jan 2010 19:36

Re: [Tutorial] Singletons in Delphi
 
Ich schließe mich da voll und ganz Aphton an.

MisterNiceGuy 29. Jan 2010 19:47

Re: [Tutorial] Singletons in Delphi
 
Upala, stimmt, pdf, danke :)

Stoney 29. Jan 2010 19:55

Re: [Tutorial] Singletons in Delphi
 
Gutes Tutorial. :)

Zwei Anmerkungen hätte ich allerdings noch:
Delphi-Quellcode:
var g_BK:Tbundeskanzler;
sollte besser nach "implementation" deklariert werden, damit der Entwickler nicht versehentlich direkt auf g_BK zugreifen kann.

Der Delphi-Compiler schreibt zurecht eine Warnung aus, dass der Konstruktor nicht in private deklariert werden sollte. Am besten solle es so aussehen:
Delphi-Quellcode:
{$WARNINGS OFF}
constructor Create;
{$WARNINGS ON}

MisterNiceGuy 29. Jan 2010 20:14

Re: [Tutorial] Singletons in Delphi
 
Oh okay, die Warnung bekommen ich in D7 nicht :) Danke für die Tips, werd's noch einarbeiten!

scrat1979 29. Jan 2010 21:26

Re: [Tutorial] Singletons in Delphi
 
Das Tutorial kommt wie gerufen für mich :) Danke Dir...

SCRaT

P.S.: Habe im Netz im Rahmen meiner Recherchen noch einen Singleton gefunden, in dem die Anzahl der Instanzen noch gespeichert wird, und wenn die letzte Instanz
(d.h. InstanceCount = 0), dann wird der Speicher komplett freigegeben. Fand ich auch eine "schöne" Sache...

mr2 29. Jan 2010 21:52

Re: [Tutorial] Singletons in Delphi
 
Hallo,

folgendes ist mir aufgefallen:

Zitat:

Delphi-Quellcode:
var BK:TBundeskanzer;
begin
  // BK muss natürlich zuvor noch initialisiert werden
  TBundeskanzer.getInstance; // Funktion steht zur Verfügung
  BK.getInstance; // Funktion wird nicht gefunden
end;

Das ist so nicht korrekt, class functions (& procedures) können in Delphi sehr wohl auch auf einer Instanz aufgerufen werden.

Zitat:

Delphi-Quellcode:
Destructor TBundeskanzler.destroy;
begin
  if g_BK = self then
    g_BK := nil;
  inherited destroy;
end;

Die Prüfung auf "g_BK = Self" kannst Du Dir sparen (es ist ja ein Singleton).
Statt dessen finde ich es sinnvoller im Destruktor eine Exception ausgelöst werden, damit niemand (aus Versehen oder absichtlich) die Singleton-Instanz zerstört.

Delphi-Quellcode:
destructor TBundeskanzler.destroy;
begin
  raise Exception.Create('Singleton darf nicht zerstört werden!');
end;
Die Methode getInstance sollte nach Möglichkeit Threadsicher gestaltet werden, damit beim gleichzeitigen Zugriff durch zwei Threads beide die selbe Instanz erhalten:

Delphi-Quellcode:
Function TBundeskanzer.getInstance:TBundeskanzler;
begin
  if (g_BK = nil) // statt TBundeskanzler.create reicht auch nur Create
  then InterlockedCompareExchange(g_BK, Create, nil);
  Result := g_BK;
end;
mr2

TBx 30. Jan 2010 04:23

Re: [Tutorial] Singletons in Delphi
 
Zitat:

Zitat von scrat1979
Habe im Netz im Rahmen meiner Recherchen noch einen Singleton gefunden, in dem die Anzahl der Instanzen noch gespeichert wird, und wenn die letzte Instanz (d.h. InstanceCount = 0), dann wird der Speicher komplett freigegeben. Fand ich auch eine "schöne" Sache...

ähm, räusper ...

das widerspricht sich total. Von einem Singelton kann es nicht mehr als eine Instanz geben, sonst wäre es ja keines .....


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr.
Seite 1 von 3  1 23      

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