Singleton vs globale Variable



  • µ schrieb:

    1. Singletons können Threadsicher gestaltet werden.

    Globale Variablen auch.

    µ schrieb:

    1. Hinter einem Singleton steckt eine vollwertige Klasse (ein vollwertiges Objekt). Beispiel: Du hast eine Settings-Singleton für die Anwendungseinstellungen. Die wollen auch gespeichert werden: Also serialisiert man einfach das ganze Objekt und rekonstruiert es beim nächsten Programmstart, mit ein paar Zeilen Code. Es können auch einfach temporäre Kopien des Settings-Objekts angelegt werden, um die Änderungen eines Benutzers an den Einstellungen rückgängig zu machen.
      Außerdem steht dir Vererbung (Erweiterbarkeit) zur Verfügung, Methoden, Polymorphie, etc..

    Globale Variablen können auch Klasseninstanzen sein.

    µ schrieb:

    1. Wenn sich herausstellt, dass das als Singleton gekapselte Objekt doch kein Singleton sein sollte, also mehrere Instanzen notwendig sind, ist die Umstellung nicht so schmerzhaft wie mit wild verstreuten globalen Variablen.

    Globale Variablen kann man auch in Namespaces stopfen.

    µ schrieb:

    1. Singletons können "lazy" instaziiert werden, wenn die Aktion dahinter teuer und selten benötigt wird.

    Jupp.



  • Ein Singleton ist dazu da, dass man von einer Klasse nur eine Instanz erstellen kann und nicht eine globale Variable nachbaut. Der vergleich ist also sinnlos.



  • toni single schrieb:

    Ein Singleton ist dazu da, dass man von einer Klasse nur eine Instanz erstellen kann und nicht eine globale Variable nachbaut. Der vergleich ist also sinnlos.

    Na, sie haben schon erstaunlich viele Ähnlichkeiten, über die man sich immer wieder unterhalten muß.

    Gibt es Singletons, die auf dem Stack leben?



  • designpatterns schrieb:

    Was ist der Vorteil von Singletons über globale Variablen?

    Der Vorteil ist - wie bei allen Entwurfsmustern - nicht technischer Natur. Singletons bieten keine besonderen Möglichkeiten oder technischen Vorteile, die mit globalen Variablen (oder anderen Ansätzen) nicht umgesetzt werden könnten. Der eigentliche Vorteil besteht darin, dass es ein Entwurfsmuster ist. Mann könnte also ebenso fragen: Was ist der Vorteil eines Entwurfsmusters?



  • designpatterns schrieb:

    Was ist der Vorteil von Singletons über globale Variablen?

    Die Frage ist sinnlos, da Singleton und globale Variable zwei völlig orthogonale Konzepte sind.



  • volkard schrieb:

    Gibt es Singletons, die auf dem Stack leben?

    Ist das nicht der Normalfall?



  • 314159265358979 schrieb:

    volkard schrieb:

    Gibt es Singletons, die auf dem Stack leben?

    Ist das nicht der Normalfall?

    Das wäre nicht mit einer "lazy" Instanziierung vereinbar.



  • 314159265358979 schrieb:

    volkard schrieb:

    Gibt es Singletons, die auf dem Stack leben?

    Ist das nicht der Normalfall?

    Ich denke eher dass die Data Section und nicht der Stack der Normalfall ist.

    Foo* Foo::get_instance()
    {
      static Foo foo;
      return &foo;
    }
    

    Ist doch eine gewöhnliche Implementierung und da landets sicher nicht auf dem Stack.



  • Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.



  • So kommen wir nicht weiter.



  • 314159265358979 schrieb:

    Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.

    Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh 🙄



  • OhMan... schrieb:

    314159265358979 schrieb:

    Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.

    Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh 🙄

    Es wurde festgestellt, daß da normalerweise nichts auf dem Stack liegt.
    Es wurde fälschlicherweise behauptet, daß da immer nichts auf dem Stack liegt. Von Dir.
    Wie immer sind die Halbfachleute bei Programmierthemen die lautesten Schreihälse. Diesmal bist Du es.



  • edit: zu lahm



  • volkard schrieb:

    OhMan... schrieb:

    314159265358979 schrieb:

    Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.

    Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh 🙄

    Es wurde festgestellt, daß da normalerweise nichts auf dem Stack liegt.
    Es wurde fälschlicherweise behauptet, daß da immer nichts auf dem Stack liegt. Von Dir.
    Wie immer sind die Halbfachleute bei Programmierthemen die lautesten Schreihälse. Diesmal bist Du es.

    Eine statisch lokale Variable liegt nicht auf dem Stack. Also mach hier nicht auf superschlau alter Mann.



  • Ich glaub manch einer sollte den Thread hier nochmal aufmerksam lesen, bevor er postet...



  • tststs schrieb:

    Eine statisch lokale Variable liegt nicht auf dem Stack. Also mach hier nicht auf superschlau alter Mann.

    Es geht mir doch nicht um den Meyers-Singleton. Und ich möchte beleuchten, inwiefern die beiden Konzepte orthogonal sind. Aber hier ist das falsche Forum dafür. Zu trollig.



  • OhMan... schrieb:

    314159265358979 schrieb:

    Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.

    Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh 🙄

    Du bist unregistriert, also nicht ernst zu nehmen. 😉

    P.S.: Ich weiß schon, dass der gloable Speicher nicht der Stack ist. Ich habe mich vertan...



  • 314159265358979 schrieb:

    OhMan... schrieb:

    314159265358979 schrieb:

    Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.

    Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh 🙄

    Du bist unregistriert, also nicht ernst zu nehmen. ;).

    Und dich kann man trotz Registrierung nicht ernst nehmen. 😃



  • Alles eine Willensfrage.



  • 314159265358979 schrieb:

    Alles eine Willensfrage.

    Womit wir schon fast bei Gott wären 😉

    Singletons haben ein besseres Image; sie sind konform mit der gängigen Lehrmeinung über gutes Design/gute Patterns. Als Student, oder sonst jemand, dessen Code bewertet wird, kann deren Verwendung also Vorteile bringen ggü. globalen Variablen. Das heißt natürlich nicht, dass sie in der Praxis besser sind.


Anmelden zum Antworten