Modello di progettazione degli osservatori vs "Ascoltatori"


136

Mi sembra che il modello di progettazione di Observer come descritto in GOF sia davvero la stessa cosa degli ascoltatori trovati in vari kit di strumenti. C'è una differenza tra i concetti, oppure gli ascoltatori e gli osservatori sono davvero la stessa cosa.

(Non sto cercando alcuna implementazione specifica del linguaggio del computer, voglio solo capire la differenza (se presente) da un punto di vista progettuale. Sì, so che ci sono diverse risposte a domande simili su SOF, ma sono radicate in domande specifiche su lingue specifiche - Sto cercando una risposta di design, non una risposta di lingua.)


19
Nel primo codice uno osserva l'altro movimento, mentre nel secondo uno ascolta l'altro codice per rilevare eventuali rumori.
c nate

2
Cosa significa GOF?
Dekaru,

Risposte:


60

Se il termine "ascoltatore" si riferisca o meno al modello di Observer dipenderà dal contesto. Ad esempio, i "Listener di eventi" di Java Swing fanno parte di un'implementazione del modello Observer mentre i "Trace Listeners" .Net non lo sono.

Non è insolito che gli autori di framework assegnino nomi diversi ai componenti che partecipano a una data implementazione di pattern, ma i nomi di pattern ufficiali sono generalmente usati quando discutono i pattern stessi.

Per quanto riguarda la progettazione, l'implementazione di un determinato modello sarà spesso influenzata dal linguaggio e dalla piattaforma utilizzati. Pertanto, una particolare implementazione del modello Observer all'interno di un determinato framework (che può capitare di usare il termine "listener" per descrivere il ruolo di ConcreteObserver) potrebbe differire leggermente da quella descritta nel libro Design Patterns.


26

C'è una natura a doppio senso nella descrizione di Observer in Design Patterns di Gamma et. al. (GoF).

Nella loro descrizione di Observer, uno dei ConcreteObserver potrebbe segnalare un cambiamento al suo Soggetto. L'oggetto, che contiene un elenco di tutti i ConcreteObservers, notifica quindi il suo elenco. Tutti i ConcreteObserver, incluso il motore principale, quindi reagiscono come appropriato.

Le implementazioni comuni di Ascoltatori sembrano reagire tutte agli eventi dall'esterno.

Quindi, direi che l'ascoltatore è un caso meno generalizzato di un osservatore.


4

Un ascoltatore potrebbe benissimo essere un'implementazione del modello di osservatore. Un ascoltatore sta essenzialmente aspettando che si verifichi un evento su un determinato oggetto, cosa che fa un osservatore.

So che non stai cercando una risposta specifica per la lingua, ma è un po 'difficile parlare di queste cose in astratto. Quindi, se dovessi indagare su questo in .NET, sarei propenso ad aprire un assembly contenente un listener in .NET Reflector, che mi permetterà di disassemblare l'assembly e verificarne la logica rispetto a un modello di progettazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.