singletons, wann machen sie sinn ?



  • Knuddlbaer schrieb:

    Aber so richtig verstanden hab ich das Problem nicht. Das hänht nun mal von der Aufgabenstellung ab ob es sinn macht.
    ...
    Check mal das Design, vllt. erübrigt sich das Problem dann von alleine.

    ein problem ist es nicht, da ich ja nur eine instanz habe und nirgendswo eine andere erzeuge.
    war mir nur unsicher ob dies state of art ist oder ob dies wie es bis jetzt gehändelt habe falsch ist. somit hat sich sich für mich die frage gestellt wann den singletons vernünfig eingesetzt werden (dein drucker bsp. ist mir klar)
    den ich könnte entweder singletons machen oder irgendwo die klassen instanzieren und dann die pointer verteilen (wie bisher).

    aber es wird wahrscheinlich auf eine design frage hinaus laufen.



  • miller_m schrieb:

    aber es wird wahrscheinlich auf eine design frage hinaus laufen.

    Jepp 🤡



  • miller_m! Sorry, aber was ist denn jetzt? Dein Designpattern ist einfach falsch. Ein Singlton ist ein offizielles Designpattern, und du hast da oben leider keine Singlton-Klasse definiert.

    Bei einem Singlton gehört der Konstruktor (jeder Konstruktor!) private bzw. protected gesetzt. Bei dir kann man jede Klasse so oft instanzieren wie man lustig ist, weil der Konstruktor public ist. Und somit ist es kein Singltton, sondern eine Klasse wie jede andere.

    lass Singleton 
    {
    public:
    	static Singleton* Instance();
    protected:
    	Singleton();
    	Singleton(const Singleton&);
    	Singleton& operator= (const Singleton&);
    private:
    	static Singleton* pinstance;
    };
    

    Implementierung:

    Singleton* Singleton::pinstance = 0;// initialize pointer
    Singleton* Singleton::Instance () 
    {
        if (pinstance == 0)  // is it the first call?
        {  
    	pinstance = new Singleton; // create sole instance
        }
        return pinstance; // address of sole instance
    }
    Singleton::Singleton() 
    { 
        //... perform necessary instance initializations 
    }
    

    Benutzung:

    Singleton *p1 = Singleton::Instance();
    Singleton *p2 = p1->Instance();
    Singleton & ref = * Singleton::Instance();
    

    Du kannst nicht einfach ein Designpattern-Begriff benutzen, aber die Implementierung dann falsch machen. 🙄



  • Artchi schrieb:

    miller_m! Sorry, aber was ist denn jetzt? Dein Designpattern ist einfach falsch. Ein Singlton ist ein offizielles Designpattern, und du hast da oben leider keine Singlton-Klasse definiert.

    Bei einem Singlton gehört der Konstruktor (jeder Konstruktor!) private bzw. protected gesetzt. Bei dir kann man jede Klasse so oft instanzieren wie man lustig ist, weil der Konstruktor public ist. Und somit ist es kein Singltton, sondern eine Klasse wie jede andere.

    im obrigen beispiel habe ich keine singletons implementiert ?!?

    meine ctor's sind alle public. somit könnte ich diese so oft instanzieren wie ich möchte. auch klar. da ich aber vom design es sogemacht habe das ich wirklich nur eine instanz der klasse habe und auch wirklich nur diese verwende ist es egal ob ich nun richtige singleton's verwende oder ein konsequentes design durchziehe.



  • miller_m schrieb:

    im obrigen beispiel habe ich keine singletons implementiert ?!?

    meine ctor's sind alle public. somit könnte ich diese so oft instanzieren wie ich möchte. auch klar. da ich aber vom design es sogemacht habe das ich wirklich nur eine instanz der klasse habe und auch wirklich nur diese verwende ist es egal ob ich nun richtige singleton's verwende oder ein konsequentes design durchziehe.

    Hast du nicht. Wie von mir bereits gesagt, Singleton ist definiert. Und definierte Begriffe sind da, damit wir uns untereinander verstehen können. Einer sagt: "Ich habe ein Singleton!" und ich weiß, ohne das ich den Code von ihm sehe, wie die Implementierung aussieht!

    Du jedoch, hast einfach irgendwas designed und benennst es einfach Singleton. Obwohl es nicht dem Singleton-Designpattern entspricht.

    Du solltest deinem Design-Pattern einen anderen Namen geben... z.B. "MillerSingle"-Designpattern. Dann weiß ich das nächste Mal, das du von DEINEM Pattern redest. 😃

    Es geht ganz einfach um das Prinzip und das wir im Forum und in der Welt kommunizieren können. Wenn jetzt jeder mit einem eigenen Klassendesign ankommt, und sagt, das ist das SingletonPattern... ich weiß nicht. 🙄



  • Artchi schrieb:

    Einer sagt: "Ich habe ein Singleton!" und ich weiß, ohne das ich den Code von ihm sehe, wie die Implementierung aussieht!

    Singleton ist ein DESIGN Pattern, also kennst du das Design, aber nicht die Implementierung. Die GOF-Implementierung ist zb anders als die von Scott Meyers.



  • Artchi schrieb:

    Hast du nicht. Wie von mir bereits gesagt, Singleton ist definiert. Und definierte Begriffe sind da, damit wir uns untereinander verstehen können. Einer sagt: "Ich habe ein Singleton!" und ich weiß, ohne das ich den Code von ihm sehe, wie die Implementierung aussieht!

    Du jedoch, hast einfach irgendwas designed und benennst es einfach Singleton. Obwohl es nicht dem Singleton-Designpattern entspricht.

    wo habe ich mein desgin als singleton definiert 😕

    Artchi schrieb:

    Es geht ganz einfach um das Prinzip und das wir im Forum und in der Welt kommunizieren können. Wenn jetzt jeder mit einem eigenen Klassendesign ankommt, und sagt, das ist das SingletonPattern... ich weiß nicht. 🙄

    ich versteh was du meinst, war mir allerdings nicht bewusst das ich mein design als singleton definiert habe. 😉

    mir ging es hauptsächlich darum

    miller_m schrieb:

    ein problem ist es nicht, da ich ja nur eine instanz habe und nirgendswo eine andere erzeuge.
    war mir nur unsicher ob dies state of art ist oder ob dies wie es bis jetzt gehändelt habe falsch ist. somit hat sich sich für mich die frage gestellt wann den singletons vernünfig eingesetzt werden (dein drucker bsp. ist mir klar)
    den ich könnte entweder singletons machen oder irgendwo die klassen instanzieren und dann die pointer verteilen (wie bisher).
    aber es wird wahrscheinlich auf eine design frage hinaus laufen.



  • Bashar schrieb:

    Artchi schrieb:

    Einer sagt: "Ich habe ein Singleton!" und ich weiß, ohne das ich den Code von ihm sehe, wie die Implementierung aussieht!

    Singleton ist ein DESIGN Pattern, also kennst du das Design, aber nicht die Implementierung. Die GOF-Implementierung ist zb anders als die von Scott Meyers.

    Ok, hast Recht, nicht die Implementierung. Aber zumindest was das ganze bewirken soll.

    GOF? Was soll das sein? Kannst du mir bitte dazu Infos geben?



  • miller_m schrieb:

    wo habe ich mein desgin als singleton definiert 😕

    Artchi schrieb:

    Es geht ganz einfach um das Prinzip und das wir im Forum und in der Welt kommunizieren können. Wenn jetzt jeder mit einem eigenen Klassendesign ankommt, und sagt, das ist das SingletonPattern... ich weiß nicht. 🙄

    ich versteh was du meinst, war mir allerdings nicht bewusst das ich mein design als singleton definiert habe. 😉

    Ich hab es leider so verstanden. Deshalb war ich widerrum ziemlich verwirrt.

    miller_m schrieb:

    mir ging es hauptsächlich darum

    miller_m schrieb:

    ein problem ist es nicht, da ich ja nur eine instanz habe und nirgendswo eine andere erzeuge.
    war mir nur unsicher ob dies state of art ist oder ob dies wie es bis jetzt gehändelt habe falsch ist. somit hat sich sich für mich die frage gestellt wann den singletons vernünfig eingesetzt werden (dein drucker bsp. ist mir klar)
    den ich könnte entweder singletons machen oder irgendwo die klassen instanzieren und dann die pointer verteilen (wie bisher).
    aber es wird wahrscheinlich auf eine design frage hinaus laufen.

    Ja, und hier verstehe ich leider nicht wirklich was du willst. 😕 Lädiglich der letzte Satz, lässt wieder alles offen, was wieder meine Verwunderung und Verwirrung bestätigt.

    Aber wollte dich nicht blöd anmachen. 😉



  • Artchi schrieb:

    Ja, und hier verstehe ich leider nicht wirklich was du willst. 😕 Lädiglich der letzte Satz, lässt wieder alles offen, was wieder meine Verwunderung und Verwirrung bestätigt.

    ich wollte wissen ob das obrige design so ok ist, und ob vielleicht jemand dieses genau so macht.
    oder ob mein ansatz kompletter schrott ist.
    oder ob singletons bevorzugt werden.
    oder vielleicht was ganz anderes.

    es hat beides vor- und nachteile finde ich.

    meinevar:
    vorteil:
    - instanzen liegen auf dem stack und ich brauche mir nicht so viel gedanken über das zerstören von objekten zu machen.
    nachteil:
    - mehr schreibarbeit
    - ständig irgendwelche ctor überladen
    - aufpassen das ich nicht irgendwo noch ne instanz starte

    singleton:
    vorteil:
    - wirklich nur eine instanz
    nachteil:
    - zerstören vom objekt (ref counting und so nen müll)

    Artchi schrieb:

    Aber wollte dich nicht blöd anmachen. 😉

    schade 😉 😃



  • singleton:
    vorteil:
    - wirklich nur eine instanz
    nachteil:
    - zerstören vom objekt (ref counting und so nen müll)

    hö? Schau dir zB. mal die Singleton Implementierung aus Modern C++ Design an (siehe Loki-Library).



  • hast vielleicht nen schönen link dazu ? oder muss ich mir das buch kaufen ?



  • miller_m schrieb:

    hast vielleicht nen schönen link dazu ? oder muss ich mir das buch kaufen ?

    loki (liegt auf sourceforge)



  • danke, ich schau es mir mal an.


Anmelden zum Antworten