Diskussion:Singleton (Entwurfsmuster)/Archiv/1

Letzter Kommentar: vor 8 Jahren von AlbrechtEhlert in Abschnitt UML

Englisch-Deutsch-Diskussion

Ich fände es besser, die einzelnen Entwurfsmuster konsistent abzulegen. Da es deutsche Bezeichner gibt und diese auch in anderen Artikeln verwendet werden, kann man meiner Meinung nach die deutschen Bezeichner wählen und im Artikel die englischen Bezeichner angeben. Das Singleton tanzt da aus der Reihe, da es umgekehrt vorgeht. Sicherlich ist Einzelstück schon belegt, aber dann müsste man meiner Meinung nach eher einen Überbegriff mit einem Artikel Einzelstück_(Entwurfsmuster) einfügen. Jedenfalls ist das bei den anderen Entwurfsmustern der Fall.--guwac


zu verwandten Entwurfsmuster: Inwiefern kann ein Singleton denn eine abstrakte Fabrik usw. implementieren? Ist hier etwas wie kapseln gemeint? guwac 14:03, 6. Mär 2005 (CET)

Nein die werden oft als Singleton implementiert. In einen solchen Fall ist die abstrakte Fabrik ein Singleton --thomasv 13:02, 7. Mär 2005 (CET)
Das heisst dann doch, dass ein Singleton genutzt wird, um eine Fabrik usw. zu kapseln und als Einzelexemplar zur Verfügung zu stellen. Faktisch werden also beide Muster kombiniert. Das sollte im Artikel vielleicht noch klarer werden. Mich hat das jedenfalls sehr verwirrt, denn ein Muster muss ja stets noch implementiert werden, weshalb mir nicht klar war, wie ein Muster ein anderes implementieren sollte. Ich persönlich habe das dann doch noch mit der Kapselung und der Kombination verstanden (hoffe ich jedenfalls), aus dem Artikeltext geht das für mich aber nicht zwingend hervor. -- guwac 13:09, 7. Mär 2005 (CET)
besser? Von Kapseln würde hier nicht unbedingt reden. Lediglich der c'tor wird verborgen, der Rest ist komplett sichtbar.--thomasv 13:37, 7. Mär 2005 (CET)
Ja, gefällt mir. In der Tat ist Kapselung ein problematischer Begriff dafür, fällt mir jetzt erst auf. Danke. -- guwac 13:54, 7. Mär 2005 (CET)

die multithreadsichere variante von java ist 2x implementiert. welche ist jetzt die richtige? -- Qopep 10:44, 27. Aug 2005 (CEST)


laut GoF 139 heißt "lazy creation" eigentlich "lazy initializing" (verzögerte Initialisierung) -- Qopep 10:53, 27. Aug 2005 (CEST)

Java-Beispiel wieder gekürzt

Die explizite Definition der clone-Methode im Java-Beispiel ist überflüssig, weil exakt diese Implementierung von java.lang.Object geerbt wird und die Beispielklasse direkt davon abgeleitet ist (siehe http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone() ). Daher habe ich sie wieder entfernt. --jpp ?! 19:32, 27. Aug 2005 (CEST)

danke! (diskussionsabschnitt kann wieder gelöscht werden) -- Qopep 21:02, 30. Aug 2005 (CEST)

Das Wort "Instanz" fuer Objekt oder Exemplar finde ich einfach nur uebel. Es handelt sich hier um einen schlimmen Angelizismus (siehe z. B. Balzert, Lehrbuch der Objektmodellierung), der an vielen Hochschulen ausgetrieben wird. Ich bitte um ein Umdenken...

-> das Wort "Instanz" ist eine anerkannte Bezeichnung in vielen Fachbüchern und wird natürlich auch an so ziemlich jeder Hochschule in friedlicher Koexistenz mit der Bezeichnung "Objekt" verwant . Davon mal abgesehen finde ich es etwas fragwürdig sich im IT-Bereich über Anglizismen zu beschweren......

Abgesehen davon ist das Wort Instanz kein Anglizismus, sondern stammt vom lateinischen instancia ab. siehe:
Wiktionary: Instanz – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
-- 82.207.235.13 11:24, 8. Jul. 2011 (CEST)

Implementierung in C#

Das Beispiel in C# stellt meiner Meinung nach keinen Singleton dar, sondern lediglich eine Klasse mit ausschließlich statischen Methoden. Es gibt also beispielsweise keine Möglichkeit, die Implementierung per Ableitung zu spezialisieren. Ich schlage vor, dass entweder jemand, der C# beherrscht, einen echten Singleton draus macht oder wir das Beispiel wieder entfernen. Andere Meinungen? --jpp ?! 10:08, 3. Feb 2006 (CET)

Da niemand eine andere Meinung geäußert hat, habe ich den C#-Teil entfernt. --jpp ?! 17:39, 8. Feb 2006 (CET)

Erweiterung des Singleton Patterns

Beim Singleton Pattern ist es möglich nur eine Instanz des Objekts zu erzeugen. Erweitert man das Kriterium, so ist es prinzipiell möglich eine definierte Anzahl von Objekten zu erzeugen. Dies geschieht mit Hilfe des Multiton Patterns.

Anwendungsbeispiele:

Falls beispielsweise zwei identische Hardwarekomponenten (gleiche Eigenschaften) verwaltet werden sollen ist das Singleton Pattern ungeeignet. Das Multiton Pattern leistet das gewünschte Resultat

In der englischen Wiki - Version ist es bereits zu finden, jedoch in der deutschen nicht!

Der Artikel gehört zur Reihe über die Entwurfsmuster der Gang of Four im Buch "Design Patterns - Elements of Reusable Object-Oriented Software". Dort ist das Multiton nicht enthalten (ehrlich gesagt höre ich jetzt auch zum ersten mal davon ;-). Trotzdem ist der Einwand berechtigt. Ich würde dann aber lieber auf einen neuen Artikel verweisen. 82.207.235.13 11:19, 8. Jul. 2011 (CEST)

Einleitung

"Das Muster gehört mit dem Iterator-Entwurfsmuster zu den von der so genannten Viererbande (GoF) publizierten Mustern."

Was soll das? Wieso gehört es zusammen mit dem Iterator-Muster zu den GoF-Mustern. Es gehört, neben einer ganzen Menge andere Muster, mit dazu (u.a. auch dem Iterator-Muster), ich verstehe den Satz irgendwie überhaupt nicht. (nicht signierter Beitrag von SeBa (Diskussion | Beiträge) )

Ich habe den Satz umformuliert. --jpp ?! 10:13, 7. Feb. 2007 (CET)

C++ Beispiel

Die statische Methode für den Zugriff auf die Singleton-Instanz sollte keinen Pointer sondern eine Referenz zurückgeben. Da das Singleton ohnehin als static Variable in der Funktion erzeugt wird, benötigt die API nicht die Möglichkeit ach einen NULL-Pointer zurückzugeben. Das sollte explizit durch die Rückgabe einer Referenz ausgedrückt werden:

 Singleton& Singleton::getInstance() { ... }

(nicht signierter Beitrag von 194.73.103.30 (Diskussion) )

Hi, es erleichtert die Diskussion, wenn du deine Diskussionsbeiträge mit „--~~~~“ signierst. Zum Thema: Meine C++-Kenntnisse sind schon etwas eingerostet, aber wenn du möchtest, sei mutig und ändere den Beispielcode im Artikel. --jpp ?! 11:15, 25. Mai 2007 (CEST)


Im ersten C++ Beispiel wird nirgends mit new() instanziiert - Fehler, oder?

Ich bin der Meinung, dass in der Funktion Destroy() keine Abfrage auf != 0 nötig ist. Begründung: - instance ist am Ende der Funktion 0, unabhängig davon, ob instance zum Begin der Funktion 0 war oder nicht. - laut 5.3.5.2 C++ Standard (ISO/IEC 14882:2003) hat ein delete auf einen null pointer keine Auswirkung (".. if the value of the operand of delete is the null pointer the operation has no effect." und ist damit redundant.

mfg Torsten --86.103.203.107 16:01, 14. Mär. 2010 (CET)

OK, hast recht. Das hab ich nicht bedacht... --Der Hâkawâti 18:52, 14. Mär. 2010 (CET)

Vorteile

Im o.g. Abschnitt steht "Das Muster bietet eine Verbesserung gegenüber globalen Variablen." Worin bestehen diese Vorteile? --Traxer 02:54, 30. Jul. 2007 (CEST)

Im GoF-Buch steht auf Seite 128: „It avoids polluting the name space with global variables that store sole instance.“ Ich verstehe das so, dass es einen Vorteil gegenüber Variablen mit globaler Sichtbarkeit darstellt, weil es den Namen innerhalb des durch eine Klasse aufgespannten Namensraums definiert. Weiß aber noch nicht, wie sich das im Artikel verständlich formulieren lässt. --jpp ?! 18:30, 30. Jul. 2007 (CEST)

"Einzelstück" vs. "Singleton"

Kein Mensch nennt dieses Pattern "Einzelstück", warum muss der feststehende Begriff unbedingt eingedeutscht werden? Ich finde das kontraproduktiv. Man schaue sich nur mal diese Seite hier an, überall "Singleton", nirgends "Einzelstück". --91.5.185.123 22:10, 31. Jul. 2007 (CEST)

mein reden. ich verschieb das jetzt, die ganzen deutschen "entwurfsmuster" nerven mich schon lange, weil ich bei diesen namen nichts mehr finde -- 22:12, 31. Jul. 2007 (CEST)
Einzelstück wurde hier immerhin als Begriff quasi eingeführt. Noch schlimmer finde ich unter "Verwandte Entwurfsmuster" die Verwendung von "abstrakte Fabriken" und "Erbauer". Sinn und Zweck der Patterns ist es doch eine gemeinsame Sprache zu haben um sich einfacher zu verständigen. Rede ich von "Builder" weiß auch der Amerikaner, der Inder und der Chinese was gemeint ist. Beim "Erbauer" müsste ich selbst erst wieder überlegen wie das Pattern korrekt heisst. Immerhin wurden im Text weitere gängige Begriffe wie Thread, Lazy Creation, Eager Creation nicht auch übersetzt. Meiner Meinung nach sollten die Fachbegriffe in englisch gehalten werden und insbesondere die Pattern Namen im Artikel geändert werden --62.159.241.40 18:01, 3. Nov. 2010 (CET)

Beispiel 'Implementierung eines Generics für Singletons in C# ab .Net 2.0' fehlerhaft?

Die Typ-Einschränkung des Generic-Parameters 'T' besagt, dass alle T einen parameterlosen Constructor (new()) besitzen müssen. Da dieser public sein muss, sonst könnte ja keine Instanz in dieser Basis-Klasse erzeugt werden, wirft diese Implementierung den Sinn eines Singletons über den Haufen. Oder übersehe ich etwas? --Heiko.Pflugbeil 23:45, 29. Aug. 2007 (CEST)

Java Beispiel

Ich finde es besser im Java Beispiel den normalen Block Kommentar zu verwenden. So wie es jetzt da steht ist das ja der JavaDoc Kommentar, der meiner Meinung nach aber eine andere Intention verfolgt.

--134.155.99.41 16:19, 25. Sep. 2007 (CEST)

Welche Absicht verfolgt deiner Meinung nach denn der Javadoc-Kommentar im Gegensatz zum Blockkommentar? --jpp ?! 23:32, 25. Sep. 2007 (CEST)

Python Sigleton

Eigentlich gibt es eine bessere Variante des Sigleton patterns für Python:

class Singleton:
    __single = None
    def __init__(self):
        if Singleton.__single:
            raise Singleton.__single
        Singleton.__single = self


Warum sollte diese Variante besser sein? Mein Vorschlag für ein Singleton, bei dem der __new__-Konstruktor zudem threadsicher ist:

import threading

class Singleton(object):
    _instance = None
    _lock = threading.Lock()

    def __new__(cls, *args, **kwargs):
        with cls._lock:
            if not cls._instance:
                cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance

(getestet unter Python 2.6) (nicht signierter Beitrag von 92.192.6.3 (Diskussion | Beiträge) 00:03, 4. Sep. 2009 (CEST))


Nachteil: Singleton kann nicht verwendet werden

Es ist kein Nachteil des Singleton-Patterns, dass man es unter bestimmten Bedingungen nicht verwenden kann (siehe z.B. kann in DDLs nur eingeschränkt verwendet werden). Das ist eher ein Nachteil der Entwicklungsumgebung.

Sollte man diese angeblichen (zwei) Nachteile nicht unter eine andere Überschrift (z.B. "Vorraussetzungen") stellen? Was denkt ihr?

--Christian 23:40, 20. Feb. 2009 (CET)

In Java gibt es hierfür keinen Workaround.

"Nachteil dieser Variante ist, dass auch nach der Instanziierung jeder Lesezugriff über getInstance(); synchronisiert ist und so mehrere gleichzeitig zugreifende Threads sich gegenseitig blockieren. In Java gibt es hierfür keinen Workaround."

Nicht? Ist denn

private static Object m_lock = new Object();

public static Singleton getInstance()
{
  if (instance == null)
    synchronized (m_lock) { if (instance == null) instance = new Singleton(); }
  return instance;
}

nicht gleichwertig dem zweiten C#-Beispiel? --83.171.150.28 14:47, 17. Mär. 2009 (CET)

Das is double-checked locking und wird als Anti-Pattern angesehen. Ohne volatile kann es dazu kommen, dass getinstance() eine Referenz auf ein noch nicht erzeugtes Objekt zurückgibt, da u.U. instance nicht mehr null ist, jedoch der Konstruktor von Singleton noch nicht vollständig ausgeführt worden ist. Mit volatile kann man das zwar verhindern, aber trotzdem wird
public static synchronized Singleton getInstance()
{
  if (instance == null)
    instance = new Singleton();
  return instance;
}
als sauberer angesehen. -- Der Hâkawâti 17:48, 17. Mär. 2009 (CET)
Dass es ohne volatile problematisch werden kann hatte ich übersehen. Und ja, schöner und sauberer ist es mit synchronisierter Methode. Die Aussage unter Java gäbe es keine Alternative im Artikel ist aber doch trotzdem falsch, oder? --83.171.148.107 22:15, 17. Mär. 2009 (CET)
Unter [1] gibt es noch mal eine ausführliche Betrachtung des Themas, in dem die unterschiedlichen Ansätze gegenüber gestellt werden. Der Autor kommt zu dem Schluss, dass die Eager Creation die einzige sichere Möglichkeit ist um das Singleton Pattern in Java umzusetzen. Vielleicht hilft das den Abschnitt etwas runder zu machen? 82.207.235.13 11:09, 8. Jul. 2011 (CEST)

Was ist denn nun ein Singleton?

Bezeichnet "Singleton"

  • das Entwurfsmuster
  • die Klasse
  • das Objekt (die Instanz) ?

Der Artikel ist da nicht konsistent. Gibt es den Begriff Singleton überhaupt alleinstehend, oder sollte man lieber konsequent von Singleton-Entwurfsmuster, Singleton-Klasse und Singleton-Objekt sprechen? --95.208.13.219 21:23, 23. Sep. 2009 (CEST)

Wie im Artikel dargelegt, ist Singleton einerseits der Name des Entwurfsmusters. Andererseits kann aber auch die Klasse oder deren einziges Exemplar so genannt werden. Natürlich spricht nichts dagegen, die genaueren Begriffe zu verwenden, sofern sich die Bedeutung nicht aus dem Kontext ergibt. --j ?! 09:32, 24. Sep. 2009 (CEST)
nee. das singleton ist die instanz, das singleton-pattern sorgt dafür, daß es von einer bestimmten klasse nur eine instanz gibt und man an sie herankommt. eine klasse ist meistens die einzige instanz ihrer metaklasse, und damit zwar auch ein singleton, dafür sorgt aber die laufzeitumgebung. wenn das mal nicht so ist, z.b. weil in java die gleiche klasse in mehreren classloadern existiert, kann das zu arger verwirrung führen. -- 11:26, 24. Okt. 2010 (CEST)

Nachteile

Die vielen Nachteile von Singleton sollten erwähnt sein. Für mich ist es eigentlich ein Antipattern! Peter Sommerlad

dann zähl doch mal auf, oder noch besser schreib gleich in den artikel.. -- 14:21, 11. Jul 2005 (CEST)

Wozu

es waere nett, wenn jemand noch dazuschreiben wuerde, wozu das singleton eigentlich benoetigt wird Elvis untot 13:22, 8. Jun 2004 (CEST)

Name

Was soll eigentlich dieser dusslige Titel: "Einzelstück"? Das sollte nicht ins deutsche übersetzt werden! Und ein Antipattern ist es mit Sicherheit auch nicht! Z. B. bei Dialog-Fenstern eignet sich das Konzept hervorragend. Auch muss man hin und wieder auf globale Daten zugreifen - auch dafür ist es sinnvoll.

Dieser Abschnitt kann archiviert werden. --Sebastian.Dietrich 16:38, 5. Apr. 2013 (CEST)

Einzelstück

Finde es bescheuert, dass die Bedeutung von Einzelstück im Einzelhandel nicht berücksichtigt wird. Wenn es nur ein Auto oder nur einen Fernseher gibt, dann ist das auch ein Einzelstück. Aber da wird man auf einen Computerbegriff weitergeleitet... Sinn? FN

Ohne Sinn... Für mich war der Begriff Einzelstück auch neu. Im Bereich der IT wird viel englisch bezeichnet, daher ist der Begriff Singleton eher besser. --Herr Schroeder 15:16, 18. Jan 2005 (CET)

Also, wenn ich Einzelstück eingebe, lande ich nicht auf dieser Seite, sondern auf einer Erklärungsseite, die den Sachverhalt wie erwartet beschreibt. Wo ist das Problem? 84.179.151.204 11:07, 31. Jan 2006 (CET)

Dieser Abschnitt kann archiviert werden. --Sebastian.Dietrich 16:38, 5. Apr. 2013 (CEST)

Müssen denn so viel

Quellcode-Beispiele wirklich enthalten sein? --Darktrym 11:23, 27. Apr. 2010 (CEST)

Ich finde das gut! 62.159.241.40 17:51, 3. Nov. 2010 (CET)

Das ist definitiv nicht gut. Wikipedia ist keine Quellcodesammlung. Ich lagere die Implementierungen jetzt nach Liste von Singleton Implementierungen aus. --Sebastian.Dietrich 16:34, 5. Apr. 2013 (CEST)

UML

Der Konstruktor sollte im UML-Klassendiagramm keinen Rückgabewert haben, noch nicht einmal void (void ist sowieso kein Element der UML). Also statt Singleton(): void besser nur Singleton() --AlbrechtEhlert (Diskussion) 14:34, 13. Apr. 2016 (CEST)

Im Text unter "Eigenschaften" wird auf das Klassen-Attribut (instance) verwiesen, das in obiger Grafik aber "singleton" heißt. (Es sollte in der Grafik und nicht im Text ausgebessert werden, denke ich)