Observer Pattern



  • Die Klasse Subject hat einen Container in dem alle Observer gespeichert sind.

    Ich hatte mal gelesen das Subject kennt seine Observer gar nicht ?



  • Ich hatte mal gelesen das Subject kennt seine Observer gar nicht ?

    Der Satz wird nicht zur Frage nur weil Du ein Fragezeichen am Ende stehen hast.
    Also, was ist deine Frage?

    Simon



  • Das Subjekt kennt seine (genauen) Observer ja auch nicht.

    Es weiß nur, da ist jemand mit einer definierten Schnittstelle, den ich ansprechen muss...



  • class DivObserver: public Observer {
      public:
        DivObserver(Subject *mod, int div): Observer(mod, div){}  // Was ist das ?
        void update() {
            // 6. "Pull" information of interest
            int v = getSubject()->getVal(), d = getDivisor();
            cout << v << " div " << d << " is " << v / d << '\n';
        }
    };
    

    Was geschieht in der 3.Zeile ?

    Sieht fast wie eine Initialisierungsliste aus.



  • stimmt sie kennt ja nur die Schnittstelle aber nicht die von der Schnittstelle
    abgeleiteten Klassen.



  • Observer(mod, div)
    

    Das ist der Aufruf des Konstruktors von der Basisklasse...
    Ob der auch 'zur Initialisierungliste' gehört, weiß ich nicht,
    zumindest steht er als erstes nach dem ':'
    Falls keiner angegeben ist, wird der parameterlose Basis-Konstruktor aufgerufen.

    Hey blurry333, du rockst ja das Forum!!!
    6 der letzten 9 Beiträge sind von dir 🙂

    EDIT: Ich meine natürlich Threads



  • blurry333 schrieb:

    class DivObserver: public Observer {
      public:
        DivObserver(Subject *mod, int div): Observer(mod, div){}  // Was ist das ?
        void update() {
            // 6. "Pull" information of interest
            int v = getSubject()->getVal(), d = getDivisor();
            cout << v << " div " << d << " is " << v / d << '\n';
        }
    };
    

    Wo hast du denn dieses Beispiel her? Ich kenne das Observer-Pattern nur mit "push", nicht mit "pull" wie hier gezeigt.
    D.h. das "Observable" (dein "Subject") speichert sich dabei eine Liste der Observer, und benachrichtigt die wenn sich was ändert.

    Und die Basisklasse "Observer" ist üblicherweise dafür zuständig den Observer beim Observable an- und abzumelden.


Anmelden zum Antworten