AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ist das ein Pattern?

Ein Thema von Jumpy · begonnen am 28. Mär 2012 · letzter Beitrag vom 28. Mär 2012
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 06: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
 
#2

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 06: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
 
#3

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07: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
4.051 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 07: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
44.516 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08: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?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.516 Beiträge
 
Delphi 12 Athens
 
#7

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08:50
Und was macht die öffentliche Funktion oftmals, bei den meisten Singletonpattern?
Die aggregiert einverleibt sich eine Klasseninstanz.

Wenn ich mir jetzt das auf'm Wiki nehm,
Zitat von http://en.wikipedia.org/wiki/Lazy_initialization:
Code:
    private static $types = array();
 
    public static function getFruit($type) {
        // Lazy initialization takes place here
        if (!array_key_exists($type, self::$types)) {
            return self::$types[$type] = new Fruit($type);
        }
 
        return self::$types[$type];
    }
das Array und Static wegmach,
Code:
    private $types;
 
    public function getFruit {
        // Lazy initialization takes place here
        if (!self::$types) {
            return self::$types = new Fruit;
        }
 
        return self::$types;
    }
dann komm ich auf diesen Code.
Delphi-Quellcode:
private fAndereKlasse:TAndereKlasse

TIrgendeineKlasse.getAndereKlasse:TAndereKlasse;
begin
  if fAndereKlasse=nil then
    fAndereKlasse:=TAndereKlasse.Create;
  Result:=fAndereKlasse;
end;
Sehr eigenartig.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Mär 2012 um 08:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 08:54
und Static wegmach
Möhp! Genau das ist ja der Trick beim Singleton, dass es nur eine Instanz geben darf. Wenn du das static wegmachst, gibt es für jede Instanz der Klasse nur eine Instanz (und das ist was ganz anderes)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.516 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ist das ein Pattern?

  Alt 28. Mär 2012, 09:01
In Delphi muß es nicht "class static" sein, es reicht schon "class", oder eine ordinäre Prozedur.
Wenn TIrgendeineKlasse die einzige vorhandene Instanz wäre, dann ist AndereKlasse implizit ebenfalls Alleine (ein Singleton).
Und ich hab nie behauptet das währe schon ein Singleton. (noch'n bissl aufmotzen und fert'sch)

Der Billigprogrammierer pappt diesen Code in seine TForm1, und schon hat er ein Singleton.
(solange er nicht auf die Idee kommt TForm1 mehrmals zu erzeugen, aber ist dann meist nur ein Bug und keine Absicht )



Halten wir es also fest:
- es ist noch kein Singleton-Pattern (bissl erweitert wird es vielleicht mal Eines)
- es ist noch kein Lazy-Pattern (bissl erweitert wird es vielleicht mal Eines)
- es ist was Anderes
Zitat:
Wenn du das static wegmachst, gibt es für jede Instanz der Klasse nur eine Instanz (und das ist was ganz anderes)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (28. Mär 2012 um 09:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:51 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