web-dev-qa-db-fra.com

Modèle de conception d'observateur vs "Auditeurs"

Il me semble que le modèle de conception Observer tel que décrit dans GOF est vraiment la même chose que les écouteurs 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 aucune 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.)

123
JohnnyLambada

Que le terme "auditeur" se réfère ou non au modèle Observer dépendra du contexte. Par exemple, Java Swing "Event Listeners" de 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.

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

53
Derek Greer

Il y a une nature à double sens dans la description d'Observer in 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 ensuite comme il convient.

Les implémentations courantes des écouteurs semblent toutes réagir aux événements extérieurs.

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

24
Richard Wеrеzaк

Un auditeur peut 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 ce genre de choses dans l'abstrait. Donc, si je devais enquêter sur cela dans .NET, je serais enclin à ouvrir un assembly contenant un écouteur dans .NET Reflector, ce qui me permettra de démonter l'assembly et de vérifier sa logique par rapport à un modèle de conception.

3
Mike