Questa implementazione di esempio del pattern Observer è ben scritta?

0

Sembra che questo esempio di implementazione del pattern Observer sia disegnato dal libro Headfirst Design Patterns, OReilly, che attualmente sto leggendo. Ecco un diagramma UML dal libro

Non è molto ben visibile, ma i metodi, che compongono l'Interfaccia Oggetto sono:

  • registerObserver ()
  • removeObserver ()
  • notifyObservers ()

Ciò di cui sono scettico è l'ultimo metodo. Perché i client dell'interfaccia dovrebbero conoscere il modo specifico in cui vengono chiamati? IMHO il luogo di questo metodo è all'interno dell'implementazione del soggetto concreto -ConcreteSubject.

    
posta Vorac 12.01.2016 - 11:38
fonte

2 risposte

0

notifyObservers è in effetti qualcosa di interno all'implementazione di Subject e non dovrebbe essere necessariamente pubblico.

È utile per una classe helper come ObserverSet . A cui inoltrare le chiamate registerObserver e removeObserver e chiamare internamente notifyObservers su.

    
risposta data 12.01.2016 - 12:01
fonte
0

Una classe osservabile, che ha i metodi di aggiunta / rimozione:

private List<MyObserver> observers;

public void addObserver(MyObserver o) {
    observers.add(o);
}

public void removeObserver(MyObserver o) {
    observers.remove(o);
}

I metodi di notifica, che non devono essere pubblici. Possono essere chiamati quando succede qualcosa, anche nella classe osservabile.

protected void notifySomething() {
    for (MyObserver o : observers) {
        o.onSomethingHappened();
    }
}

In addizione, l'interfaccia dell'osservatore. Puoi solo aggiungere oggetti che implementano questa interfaccia:

public interface MyObserver {
    public void onSomethingHappened();
}

Infine, avrei un'interfaccia generica osservabile in modo che qualsiasi classe osservabile la implementa:

public interface Observable<T> {
    public void addObserver(T o);
    public void removeObserver(T o);
}
    
risposta data 10.06.2016 - 22:22
fonte

Leggi altre domande sui tag