Médiateur Vs Observateur Orientée Objet Patrons De Conception
J'ai lu le La Bande Des Quatre, afin de résoudre certains de mes problèmes et est venu à travers la Médiateur modèle.
J'avais auparavant utilisé Observateur dans mes projets pour la fabrication de certains interface graphique de l'application. Je suis un peu confus que je ne trouve pas de grande différence entre les deux. Je l'ai consulté pour trouver la différence, mais ne pouvait pas trouver un apt réponse pour ma requête.
Peut-on m'aider à différencier entre les deux avec quelques bon exemple qui délimite clairement les deux?
- Ma demande de migration de cette question à
Programmers.StackExchange
a été refusé, mais j'ai fait un poste similaire là parce que j'étais intéressé par la réponse. Vous pourriez trouver quelques réponses intéressantes. 🙂 - Pour des exemples de JavaScript, vous pouvez prendre un coup d'oeil à ma réponse à une question similaire.
- L'original GoF carnet d'adresses en vertu de la section mise en œuvre point #8, en donnant un exemple de
ChangeManager
pour laObserver
modèle qui utiliseMediator
. voir; paginas.fe.jusqu'.pt/~aaguiar/comme/gof/locations/pat5g.htm#samplecode
Vous devez vous connecter pour publier un commentaire.
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, & 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).
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 y a 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.
Observateur
1. Sans
Client1: Hey Sujet, quand pensez-vous changer?
Client2: Quand avez-vous changé de Sujet? Je n'ai pas remarqué!
Client3: je sais que Sujet a changé.
2. Avec
Médiateur
1. Sans
2. Avec
Ces modèles sont utilisés dans des situations différentes:
Le médiateur modèle est utilisé lorsque vous avez deux sous-systèmes avec une certaine dépendance et l'un d'eux est due 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 changements, 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 d'enregistrer eux-mêmes et de recevoir des notifications sur les événements, les e. g. ButtonListener etc.
Deux de ces modèles permettent moindre de couplage, mais sont tout à fait différents.
Bien que les deux d'entre eux sont utilisés pour la façon de parler de modifications de l'état, ils sont légèrement différents structurellement et sémantiquement de l'OMI.
Observateur est utilisé pour la diffusion d'un changement d'état d'un objet particulier, à partir de l'objet lui-même. Si le changement se produit dans l'objet central est également responsable de la signalisation de l'il. Cependant, de Médiateur, de l'état, des changements peuvent se produire dans n'importe quel objet, mais il est diffusé à partir d'un médiateur. Il y a donc une différence dans le flux. Mais, je ne pense pas que cela affecte notre code de conduite. On peut utiliser l'un ou l'autre pour obtenir le même comportement. D'autre part, cette différence pourrait avoir une certaine influence sur la compréhension conceptuelle du code.
Voir, le but principal de l'utilisation de modèles est plutôt de créer un langage commun entre les développeurs. Donc, quand je vois un médiateur, personnellement, je le comprends plusieurs éléments en essayant de communiquer sur un seul courtier/hub pour réduire la communication de bruit (ou à promouvoir SRP) et chaque objet est tout aussi important en termes d'avoir la possibilité de signaler un changement d'état. Par exemple, penser à plusieurs avions à l'approche d'un aéroport. Chacun doit communiquer sur le pylône (médiateur) plutôt que de communiquer les uns avec les autres. (Pensez à 1000 avions de communiquer les uns avec les autres lors de l'atterrissage - ce qui serait un gâchis)
Cependant, quand je vois un observateur, il y a aussi certaines modifications de l'état je suis peut-être et qu'elle doit s'inscrire/abonnez-vous pour écouter particulier les changements d'état. Il y a un objet central responsable du signalement des modifications de l'état. Par exemple, si je garde à l'égard d'un aéroport sur mon chemin de A à B, je peux enregistrer à l'aéroport pour attraper quelques-uns des événements diffusés comme si il y a un vide de la piste ou quelque chose comme ça.
Espère que c'est clair.
@cdc explique la différence dans l'intention de faire ses preuves.
Je vais ajouter un peu plus d'infos sur le dessus il.
Observateur : Permet de notification d'un événement dans un objet à l'autre ensemble d'objets ( instances de classes différentes)
Médiateur: Centraliser la communication entre l'ensemble des objets, créé à partir d'une classe particulière.
Structure de Médiateur modèle de dofactory:
Médiateur: Définit une interface pour la communication entre Collègues.
Collègue: Est une classe abstraite qui définit les événements de communiquer entre Collègues
ConcreteMediator: Implémente un comportement coopératif, par la coordination des Collègue objets et maintient ses collègues
ConcreteColleague: met en œuvre la notification des opérations reçues par Médiateur, qui a été généré par d'autres Collègue
Un exemple réel:
Vous êtes le maintien d'un réseau d'ordinateurs dans Maillage topologie. Si un nouvel ordinateur est ajouté Ou ordinateur existant est supprimé, tous les autres ordinateurs de ce réseau devrait savoir au sujet de ces deux événements.
Nous allons voir comment Médiateur modèle s'inscrit en elle.
Extrait de Code:
de sortie:
Explication:
Permet de passer par un exemple: considérons que vous voulez construire deux applications:
médiateur
La construction de l'application de chat vous sera de choisir la
mediator
motif de conception.Pourquoi nous préférons le
mediator
? juste un coup d'oeil à sa définition:Comment la magie fonctionne? Nous allons d'abord créer le chat de médiateur et de rendre les personnes objets de registre, de sorte que il sera équipé de deux directionnelle connexion avec chaque personne (la personne peut envoyer un message en utilisant le chat médiateur de la cause ha l'accès et le chat médiateur accéder à la méthode reçue de la personne objet de cause, il a également accès à celle-ci)
observateur
La construction de l'appel 911 application, vous serez en choisissant l'
observer
motif de conception.observer
objet souhaite être informé quand il y a un état d'urgence, de sorte qu'il peut en voiture de l'adresse et de donner de l'aide.observable
garder des références à chacun de l'ambulanceobservers
et les informer lorsque l'aide est nécessaire (ou générateur).Pourquoi nous préférons le
observer
? juste un coup d'oeil à sa définition:Les Différences:
mediator
a deux voies de communication entre les personnes, les objets (envoyer et recevoir) wheres l'opérateurobservable
n'a qu'un seul moyen de communication (Il dire que l'ambulanceobserver
de conduire et de finition).mediator
peut rendre les personnes, les objets interagissent entre eux (même si c'est pas une communication directe), les ambulancesobservers
uniquement des registres de l'opérateurobservable
événements.mediator
, et aussi le chatmediator
garder des références de la tous les les personnes. Wheres l'ambulanceobserver
ne garde pas de référence à l'opérateurobservable
, seul l'opérateurobservable
garder de référence pour chaque ambulanceobserver
.Comment de cette explication
Techniquement à la fois Observateur et le Médiateur sont les mêmes et sont utilisés pour fournir de façon découplée pour le volet de la communication, mais l'utilisation est différente.
Tout
obeserver
informe souscrit composants sur les modifications de l'état (création de nouveaux db, par exemple), lamediator
commandes enregistré composants à faire quelque chose de lié à la logique métier de flux (envoi d'e-mail de l'utilisateur pour réinitialiser le mot de passe).Observateur
Médiateur