![]() |
Ist das ein Pattern?
Hallo,
ich habe neulich in einem Programm das folgende Konzept entdeckt, durch das (nur bei Bedarf) eine Instanz einer anderen Klasse erzeugt wird, die dann innerhalb der erzeugenden Klasse überall verfügbar ist. Ist das ein Pattern und wenn ja, wie nennt man das. Und ist der Einsatz sinnvoll?
Delphi-Quellcode:
Im Implementaionsteil dann:
Type IrgendeineKlasse = class
private fAndereKlasse:TAndereKlasse function getAndereKlasse:TAndereKlasse; public property AndereKlasse:TAndereKlasse read getAndereKlasse; end;
Delphi-Quellcode:
Im Destruktor der Klasse wird die andere Klasse dann ggf. freigegeben mit:
TIrgendeineKlasse.getAndereKlasse:TAndereKlasse;
begin if fAndereKlasse=nil then fAndereKlasse:=TAndereKlasse.Create; Result:=fAndereKlasse; end;
Delphi-Quellcode:
Die andere Klasse kann dann in der IrgendeineKlasse überall aufgerufen werden mit:
if fAndereKlasse<>nil then
fAndereKlasse.Free;
Delphi-Quellcode:
AndereKlasse.Machwas
|
AW: Ist das ein Pattern?
Jupp, ist ein ganz normales und oftgenutztes Verhalten, auch wenn es etwas überdimensioniert ist.
Wird auch gerne für ![]() Wozu soll man etwas schon erstellen, obwohl es jetzt (zur Erstellungszeit) noch nicht oder überhaupt jemals verwendet wird? z.B. das Free, es prüft selber auch nochmal auf NIL.
Delphi-Quellcode:
Viele erstellen ihre Programme so, daß alle dutzende/hunderte Fenster gleich beim Programmstart unsichtbar erstellt werden, auch wenn viele der Fenster garnicht oder nur selten/kurz verwendet werden.
function TIrgendeineKlasse.getAndereKlasse: TAndereKlasse;
begin if not Assinged(fAndereKlasse) then fAndereKlasse := TAndereKlasse.Create; Result := fAndereKlasse; end; destructor TIrgendeineKlasse.Destroy; begin fAndereKlasse.Free; inherited; end; = unnötige Resourcenverschwendung |
AW: Ist das ein Pattern?
Ich kann es mir jetzt aber nicht verkneifen
zu sagen, dass das kein Singleton ist! Liebe Grüße, Valentin |
AW: Ist das ein Pattern?
Zitat:
![]() Schöne Grüße aus Nürnberg, Manfred |
AW: Ist das ein Pattern?
Zitat:
Popov fragt eigentlich nach Lazy Creation Himitsu verweist darauf, dass das (Lazy Creation) gerne bei Singletons eingesetzt wird Valle weist nochmals explizit darauf hin, dass es (Popovs Klasse) kein Singleton ist. Und die Wikipedia sagt da auch nicht anderes ... (wär ja sonst auch falsch) |
AW: Ist das ein Pattern?
Muss das Sir Rufo voll und ganz Recht geben ;) Ein richtiges Design Pattern ist es nicht, eher ein Konzept, oder? Kenne das auch unter dem Begriff Lazy Load/Lazy Creation.
Aber das obige Codebeispiel finde ich eher etwas ungeschickt, da der Zugriff auf die Variable fAndereKlasse noch gekapselt werden sollte. Programmierer müssen sonst ja wissen, dass man auf die Get-Methode zugreifen muss und nicht auf fAndereKlasse zugreifen darf. Aber das nur so am Rande :stupid: |
AW: Ist das ein Pattern?
Zitat:
Code:
public
property AndereKlasse:TAndereKlasse read getAndereKlasse; end; |
AW: Ist das ein Pattern?
Zitat:
![]() |
AW: Ist das ein Pattern?
Ja, für sich alleine gesehn ist es kein Singleton, aber
- komisch, es sieht vom Code genau wie die Wiki-Beispiele aus. - abgesehn davon, daß es dort noch in einer statischen Klassenmethode versteckt ist, mit einer globalen Variable. (wenn man implizit davon ausgeht, daß es von IrgendeineKlasse nur maximal eine Instanz gibt, dann ist es ein Singleton) - und zusätzlich wird oftmals noch (was in den Wikicodes nicht zu sehn ist, das externe Freigeben der Instanz verhindert, wenn es sich um ein Singleton handelt. Also nein, es ist Keines, aber mit ein paar Erweiterungen wird es Eines und nix Anderes hab'sch doch gesagt? |
AW: Ist das ein Pattern?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr. |
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