AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ist das ein Pattern?

Ein Thema von Jumpy · begonnen am 28. Mär 2012 · letzter Beitrag vom 28. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23   
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.717 Beiträge
 
Delphi 6 Enterprise
 
#1

Ist das ein Pattern?

  Alt 28. Mär 2012, 01:03
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:
Type IrgendeineKlasse = class
  private
    fAndereKlasse:TAndereKlasse
    function getAndereKlasse:TAndereKlasse;
  public
    property AndereKlasse:TAndereKlasse read getAndereKlasse;
  end;
Im Implementaionsteil dann:

Delphi-Quellcode:
TIrgendeineKlasse.getAndereKlasse:TAndereKlasse;
begin
  if fAndereKlasse=nil then
    fAndereKlasse:=TAndereKlasse.Create;
  Result:=fAndereKlasse;
end;
Im Destruktor der Klasse wird die andere Klasse dann ggf. freigegeben mit:
Delphi-Quellcode:
if fAndereKlasse<>nil then
  fAndereKlasse.Free;
Die andere Klasse kann dann in der IrgendeineKlasse überall aufgerufen werden mit:
AndereKlasse.Machwas
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 01:36
Jupp, ist ein ganz normales und oftgenutztes Verhalten, auch wenn es etwas überdimensioniert ist.
Wird auch gerne für Bei Google suchenSingletons verwendet. (wenn man es noch etwas aufmotzt)

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:
function TIrgendeineKlasse.getAndereKlasse: TAndereKlasse;
begin
  if not Assinged(fAndereKlasse) then
    fAndereKlasse := TAndereKlasse.Create;
  Result := fAndereKlasse;
end;

destructor TIrgendeineKlasse.Destroy;
begin
  fAndereKlasse.Free;
  inherited;
end;
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.
= unnötige Resourcenverschwendung
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list

Geändert von himitsu (28. Mär 2012 um 10:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07:21
Ich kann es mir jetzt aber nicht verkneifen
zu sagen, dass das kein Singleton ist!

Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
mz23
(Gast)

n/a Beiträge
 
#4

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07:35
Ich kann es mir jetzt aber nicht verkneifen
zu sagen, dass das kein Singleton ist!

Liebe Grüße,
Valentin
Mal sehen, was de.Wikipedia dazu sagt:

http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)

Schöne Grüße aus Nürnberg,
Manfred
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07:44
Ich kann es mir jetzt aber nicht verkneifen
zu sagen, dass das kein Singleton ist!

Liebe Grüße,
Valentin
Mal sehen, was de.Wikipedia dazu sagt:

http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)

Schöne Grüße aus Nürnberg,
Manfred
Jetzt frage ich mich aber was soll das?

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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07:50
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
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08:11
[...] Aber das obige Codebeispiel finde ich eher etwas ungeschickt, da der Zugriff auf die Variable fAndereKlasse noch gekapselt werden sollte. [...]
Wie denn noch als über das Property?
Code:
public
    property AndereKlasse:TAndereKlasse read getAndereKlasse;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.921 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08:21
Popov fragt eigentlich nach Lazy Creation
Lazy initialization um genau zu sein
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.504 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 09:15
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.921 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 09:22
Also nein, es ist Keines, aber mit ein paar Erweiterungen wird es Eines
und nix Anderes hab'sch doch gesagt?
Dir ist wohl entgangen, dass es sich hier um eine Aggregation von IrgendeineKlasse und TAndereKlasse handelt oder?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf