Verständnisfrage zu Observern



  • Hi
    ich hab mir das Buch Entwurfsmuster von Kopf bis Fuß gekauft und bin gerade dabei mich in das Observermuster einzuarbeiten. Dabei sind jetzt zum Code im Buch einige Fragen aufgetaucht die ich nicht verstehe:

    Oberserverble Klasse

    .
    .
    .
    <snip>
    public WetterDaten(){
      beobachter = new Arraylist()
    }
    
    public void registriere Beobachter(Beobachter b)
    {
      beobachter.add(b)
    }
    
    </snip>
    .
    .
    .
    

    Observer

    .
    .
    .
    <snip>
    public AktuelleBedingungenAnzeigen(Subjekt wetterDaten)
    {
      this.wetterDaten = WetterDaten;
      wetterDaten.registriereBeobachter(this)
    }
    </snip>
    .
    .
    .
    

    Ausführung

    .
    .
    .
    <snip>
    WetterDaten wetterDaten = new WetterDaten();
    AktuelleBedingungenAnzeigen aktuelleAnzeige = new AktuelleBedingungenAnzeigen(wetterDaten);
    </snip>
    .
    .
    .
    

    Hier kommt jetzt Endlich meine Frage: Wo ist der Vorteil der Obrigen Methode gegenüber von

    WetterDaten wetterDaten = new WetterDaten();
    AktuelleBedingungenAnzeigen aktuelleAnzeige = new AktuelleBedingungenAnzeigen();
    wetterDaten.registriereBeobachter(aktuelleAnzeige)
    

    Ich sehe in meiner Methode den Vorteil das ich meine zu Observierende Klasse nicht an den Observer übergeben muss.
    Falls der Observer Daten herrausziehen soll gehts wohl nicht anders denke ich aber wenn nur die zu Observierende Klasse Daten schicken soll wäre das doch besser oder nicht?

    Gruß

    eiskalt



  • Es kommt wohl auf den konkreten Anwendungsfall an.

    Deine Methode hat auch den Vorteil, dass man denselben Observer an beliebig viele Observables anhängen kann. Normalerweise bekommt der Observer zudem im Ereignisfall das konkrete Objekt geliefert, dass das Ereignis ausgelöst hat, so dass er auf dessen Daten zugreifen kann, ohne es bei der Erstellung kennen zu müssen.

    Die vorgegebene Methode ist wohl vor allem aus Gründen der Bequemlichkeit entstanden.


Anmelden zum Antworten