Modèle de conception d'observateur et "auditeurs"


136

Il me semble que le modèle de conception d'Observer tel que décrit dans GOF est vraiment la même chose que les Listeners trouvés dans diverses boîtes à outils. Y a-t-il une différence entre les concepts, ou les auditeurs et les observateurs sont-ils vraiment la même chose?

(Je ne recherche pas d'implémentation de langage informatique spécifique, je veux juste comprendre la différence (le cas échéant) du point de vue de la conception. Oui, je sais qu'il existe plusieurs réponses à des questions similaires sur SOF, mais elles sont enracinées dans des questions spécifiques sur des langues spécifiques - je recherche une réponse de conception, pas une réponse de langue.)


19
Dans le premier, un code regarde l'autre code pour le mouvement, tandis que dans le second, un code écoute l'autre code pour tout bruit.
nate c

2
Que signifie GOF?
dekaru

Réponses:


60

Le fait que le terme «auditeur» se réfère ou non au modèle Observer dépendra du contexte. Par exemple, les "Event Listeners" de Java Swing font partie d'une implémentation de modèle Observer alors que .Net "Trace Listeners" ne le sont pas.

Il n'est pas rare que les auteurs de framework attribuent des noms différents aux composants participant à une implémentation de modèle donnée, mais les noms de modèle officiels sont généralement utilisés lors de la discussion des modèles eux-mêmes.

En ce qui concerne la conception, la mise en œuvre d'un modèle donné sera souvent influencée par le langage et la plate-forme utilisés. En tant que telle, une implémentation particulière du pattern Observer dans un cadre donné (qui peut arriver à utiliser le terme "auditeur" pour décrire le rôle du ConcreteObserver) peut différer légèrement de celle décrite dans le livre Design Patterns.


26

La description d'Observer dans Design Patterns par Gamma et. Al. (GoF).

Dans leur description d'Observer, l'un des ConcreteObservers pourrait signaler un changement de son sujet. Le sujet, qui contient une liste de tous les ConcreteObservers, notifie ensuite sa liste. Tous les ConcreteObservers, y compris le moteur principal, réagissent alors comme il convient.

Les implémentations courantes des écouteurs semblent toutes réagir aux événements de l'extérieur.

Donc, je dirais que l'auditeur est un cas moins généralisé d'observateur.


4

Un auditeur peut très bien être une implémentation du modèle d'observateur. Un auditeur attend essentiellement qu'un événement se produise sur un objet donné, ce que fait un observateur.

Je sais que vous ne recherchez pas une réponse spécifique à une langue, mais c'est un peu difficile de parler de cela dans l'abstrait. Donc, si je devais étudier cela dans .NET, je serais enclin à ouvrir un assemblage contenant un écouteur dans .NET Reflector, ce qui me permettra de démonter l'assemblage et de vérifier sa logique par rapport à un modèle de conception.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.