Les références (modèles de conception GOF, principaux motifs de conception de la tête, http: //www.dofactory. com / motifs / modrobserver.aspx ) que j'ai lu concernant le motif de conception observateur stipule que le sujet concret tient une référence à l'observateur concret. Beaucoup comme celui-ci:
class ConcreteObserver : IObserver { ISubject concreteSubjectInstance; //other code, etc. }
5 Réponses :
juste parce que la définition que vous lisez les états Tant que le sujet a une référence / un lien vers l'observateur, que ce soit concret ou via une interface / classe, la déclaration reste vraie. P>
Son très courant de voir une interface sur iobserver latéral et iobservable. Je pense que la question que vous allez trouver est que lorsque vous faites du sujet abstrait, vous devez vraiment essayer d'essayer durement et de trouver comment em> pour rendre votre état générique. p> Le sujet contient une référence à l'observateur concret code> ne signifie pas que vous devez le lire littéralement. p>
de votre image, votre méthode "Mettre à jour ()" ne reçoit aucune information forte> à propos de l'état du sujet, de sorte que l'observateur a besoin d'informations sur cet état (comme d'habitude dans le modèle d'observateur ), alors Une alternative à ce schéma serait de transmettre l'état (ou une référence à la bétonneuse complète) en tant que paramètre de «mise à jour ()». p>
Autres explications générales à Avoir une référence à Concrétésubject au lieu d'Isubject em> peut être que vous voudrez peut-être interagir avec le concretSubject pour invoquer la logique commerciale (bien sûr non exposée dans l'interface ISubject). p>
«Passer comme paramètre à la méthode de mise à jour»: Je suppose que cela pourrait également être comme un paramètre sur le constructeur d'observateur.
Oui, pour définir la référence interne, elle devrait être effectuée dans le constructeur. Mais si vous ne conservez pas une référence interne, vous pouvez toujours recevoir dans chaque invocation de «mise à jour ()». C'est la façon dont la mise en œuvre de modèle d'observateur intégrée Java est intégrée.
Observateur de béton et la mise en œuvre du sujet concrète ont également un état. Lorsque l'état de sujet est des changements, l'état d'observateur concret est également mis à jour. Mais parfois, vous pourriez avoir besoin de voir l'état de sujet que vous n'avez pas, pour cela, vous feriez mieux de faire référence à la matière. En d'autres termes, afin de voir l'état de sujet concret. P>
Je vais essayer de fournir mon point de vue. P>
Pourquoi le béton? Ne causeront-ils pas de couplage entre sujet et observateur? Em> p> blockQuote>
La principale préoccupation du modèle d'observateur est de 1 à n modèle, pas de N-to-N, et celle-ci est réalisée par l'interface d'observateur. P> li>
Oui, il provoque un couplage et il est destiné, chaque observateur de béton obtiendra donc exactement ce qu'il veut, sans "contexte de passage" redondant ". P> li> ul>
Le couplage est mauvais, mais principe> découplage. p>
Si un sujet concret est accessible via l'interface de sujet, nous pouvons vous abonner à différents sujets au moment de l'exécution! Droite? Em> p> blockQuote>
- Non, pour chaque
Mise à jour
() CODE>, il ne devrait faire que une chose forte>. principe de responsabilité unique em>. li>
- Et si on veut écouter
plusieurs événements forts>? Cela peut être fait par composition em>, pas si de regrouper toutes les choses dans un seul mise à jour () code>. Li> ul>
Certains livres / ressources en ligne auteurs font
update () code> dans quelque chose comme
update (sujet, contexte, varname, ...) code> alors ils supposent ce que l'observateur aurait besoin, mais p>
Quel obtient un observateur n'aura pas besoin de ce sujet, pourquoi ne pas le prendre vous-même? P> blockQuote>
Couplage ConcretObServer sur Concrétésubjecte de sorte que le travail du sujet consiste simplement à envoyer une notification, pas les données. P>
Sujet: Hé tout le monde, mon magasin est ouvert!
Obsérant: OK, je pense avoir besoin de cet iPhone.
Observateur: OK, je pense avoir besoin de cet ordinateur Windows.
Observateur: J'aime l'ordinateur iPhone et Windows, je devrais peut-être demander à A, B pour les nouvelles. P>
D'accord avec @Rainning, les observateurs concrets peuvent avoir intérêt à différents domaines d'observabilité. L'observateur peut obtenir ce qu'il veut dans sa propre méthode de mise à jour. Voici un exemple pour mes études «Head premier modèle de conception» avec C ++: P>
https://github.com / Jwbecalm / Head-First-Design-Modèles-in-CPP / Tree / Main / CH02_OBSERVER P>
Inclure également la classe Plantuml P>