115 votes

Mediator Vs Observer

J'ai lu le "Gang Of Four", afin de résoudre certains de mes problèmes et suis tombé sur le modèle "Mediator".

J'avais précédemment utilisé "Observer" dans mes projets pour créer une application graphique. Je suis un peu confus car je ne trouve pas de grande différence entre les deux. J'ai parcouru pour trouver la différence, mais je n'ai trouvé aucune réponse appropriée à ma requête.

Quelqu'un pourrait-il m'aider à différencier les deux avec un bon exemple qui les démarque clairement?

119voto

cdc Points 897

Le pattern observer: Définit un un-à-plusieurs dépendances entre les objets de sorte que quand un objet change d'état, tous ses personnes à charge sont notifiés et mis à jour automatiquement.

Le Médiateur modèle: Définir un objet qui encapsule la façon dont un ensemble d'objets interagissent. Médiateur favorise le couplage lâche en gardant les objets de référence les uns aux autres de manière explicite, et il vous permet de varier leur interaction indépendamment.

Source: dofactory

Exemple:

Le pattern observer: De classe A, peut avoir zéro, un ou plusieurs observateurs de type O enregistrés auprès d'elle. Quand quelque chose est changé, il le notifie à tous les observateurs.

Le médiateur modèle: Vous avez un certain nombre d'instances de la classe X (ou peut-être même de plusieurs types:X, Y Et Z), et ils souhaitent communiquer les uns avec les autres (mais vous ne voulez pas à chacun d'avoir des références explicites à l'autre), afin de vous créer un médiateur de la classe de M. Chaque instance de X a une référence à une instance partagée de M, à travers lesquels il peut communiquer avec les autres instances de X (ou X, Y et Z).

47voto

psr Points 2009

Dans le livre original qui a inventé les termes de l'Observateur et de Médiateur, Modèles de Conception, des Éléments de Logiciels Orientés Objets Réutilisables, il est dit que le Médiateur modèle peut être mis en œuvre en utilisant le pattern observer. Mais il peut aussi être mis en œuvre par avoir des Collègues (qui sont à peu près équivalent pour les Sujets de l'Observateur modèle) ont une référence à un Médiateur de la classe ou d'un Médiateur de l'interface.

Il existe de nombreux cas où vous souhaitez utiliser le pattern observer, ils clé est qu'un objet ne doit pas savoir ce que les autres objets sont l'observation de l'état.

Médiateur est un peu plus précis, il évite d'avoir des classes de communiquer directement, mais plutôt par l'intermédiaire d'un médiateur. Cela aide le principe de Responsabilité Unique, en permettant la communication pour être déchargées à une classe qui vient s'occupe de la communication.

Un classique Médiateur exemple est dans une interface graphique, où l'approche naïve pourrait conduire à un code sur un bouton, cliquez sur l'événement en disant: "si les Foo panneau est désactivé et le panneau de la Barre a une étiquette indiquant "Veuillez entrer la date", puis ne pas appeler le serveur, sinon, aller de l'avant", où, avec le Médiateur modèle, il pourrait dire "je suis juste un bouton et n'ont pas d'terrestre entreprise connaître les Foo panneau et l'étiquette sur le panneau de la Barre, donc je vais juste demander à mon médiateur si vous appelez le serveur est O. K., maintenant."

Ou, si le Médiateur est mis en œuvre en utilisant le pattern observer le bouton dit "Hey, les observateurs (qui pourrait inclure le médiateur), mon état modifié (quelqu'un a cliqué sur moi). Faire quelque chose à ce sujet si vous avez des soins". Dans mon exemple, que, probablement, moins de sens alors directement le référencement du médiateur, mais dans de nombreux cas en utilisant le pattern observer pour mettre en œuvre Médiateur aurait du sens, et la différence entre l'Observateur et le Médiateur serait plus un d'intention que d'une différence dans le code lui-même.

16voto

uzilan Points 522

Ces modèles sont utilisés dans différentes situations:

Le médiateur modèle est utilisé lorsque vous avez deux sous-systèmes dont certains dépendance et un de la sont dus pour un changement, et puisque vous ne pourriez pas vouloir changer le système qui dépend de l'autre, vous pouvez introduire un médiateur qui va dissocier la dépendance entre eux. De cette manière, lorsque l'un des sous-systèmes de changement, tout ce que vous avez à faire est de mettre à jour le médiateur.

Le modèle observateur est utilisé lorsqu'un cours veut permettre à d'autres classes pour s'inscrire et recevoir les notifications sur les événements, les e. g. ButtonListener etc.

Les deux modèles de cette permettre la moindre de couplage, mais sont tout à fait différents.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X