Cet article présente principalement en détail les informations pertinentes sur le modèle intermédiaire du modèle de conception, qui a une certaine valeur de référence. Les amis intéressés peuvent se référer à
Définition : Utiliser un objet médiateur. pour encapsuler une série d'interactions d'objets. Le médiateur permet à chaque objet d'interagir sans interaction explicite, desserrant ainsi le couplage et permettant de modifier indépendamment l'interaction entre eux.
Type : Modèle comportemental
Diagramme de classe :
Modèle médiateur La structure de
Le modèle intermédiaire est également appelé modèle médiateur A partir du diagramme de classes, il est divisé en 3 parties :
Médiateur abstrait : définition L'interface. de l'objet de classe bon collègue à l'objet médiateur est utilisé pour la communication entre différentes classes de collègues. Comprend généralement une ou plusieurs méthodes d'événements abstraits et est implémenté par des sous-classes.
Classe d'implémentation du médiateur : héritée du médiateur abstrait, implémente les méthodes d'événement définies dans le médiateur abstrait. Reçoit les messages d'une classe homologue, puis affecte les autres classes concurrentes via le message.
Classe collègue : Si un objet affecte d'autres objets et est également affecté par d'autres objets, alors ces deux objets sont appelés classes collègues. Dans le diagramme de classes, il n'y a qu'une seule classe de collègues, ce qui est en fait une omission de la réalité. Dans les applications pratiques, les classes de collègues sont généralement composées de plusieurs classes, et elles interagissent et dépendent les unes des autres. Plus il y a de types de collègues, plus la relation devient complexe. De plus, la classe collègue peut également être représentée comme un groupe d’implémentations héritant de la même classe abstraite. Dans le modèle médiateur, les messages doivent être transmis entre les classes de collègues via un médiateur.
Pourquoi utiliser le modèle intermédiaire
De manière générale, la relation entre les classes de collègues est relativement complexe et plusieurs classes de collègues sont parfois liées les unes aux autres. la relation entre eux apparaîtra comme une structure de réseau complexe. Il s'agit d'une architecture surcouplée qui n'est pas propice à la réutilisation des classes et est instable. Par exemple, dans la figure ci-dessous, il y a six objets de classe collègue. Si l'objet 1 change, 4 objets seront affectés. Si l'objet 2 change, alors 5 objets seront affectés. En d’autres termes, la conception d’une corrélation directe entre les classes de collègues n’est pas bonne.
Si le modèle de médiateur est introduit, la relation entre les classes de collègues deviendra une structure en étoile. Comme le montre la figure, toute classe change. n’affectera que la classe elle-même et le médiateur, réduisant ainsi le couplage du système. Une bonne conception n’encapsulera pas toute la logique de traitement des relations objet dans cette classe, mais utilisera une classe spéciale pour gérer les comportements qui ne vous appartiennent pas.
Utilisons un exemple pour illustrer ce qu'est une classe de collègue : il y a deux classes A et B, chacune a un numéro dans la classe, et le numéro dans la classe B doit être garanti C'est toujours 100 fois le nombre en classe A. Autrement dit, lors de la modification d'un nombre dans la classe A, multipliez le nombre par 100 et attribuez-le à la classe B, et lors de la modification de la classe B, divisez le nombre par 100 et attribuez-le à la classe A. Les classes A et B interagissent les unes avec les autres et sont appelées co-classes. Le code est le suivant :
abstract class AbstractColleague { protected int number; public int getNumber() { return number; } public void setNumber(int number){ this.number = number; } //抽象方法,修改数字时同时修改关联对象 public abstract void setNumber(int number, AbstractColleague coll); } class ColleagueA extends AbstractColleague{ public void setNumber(int number, AbstractColleague coll) { this.number = number; coll.setNumber(number*100); } } class ColleagueB extends AbstractColleague{ public void setNumber(int number, AbstractColleague coll) { this.number = number; coll.setNumber(number/100); } } public class Client { public static void main(String[] args){ AbstractColleague collA = new ColleagueA(); AbstractColleague collB = new ColleagueB(); System.out.println("==========设置A影响B=========="); collA.setNumber(1288, collB); System.out.println("collA的number值:"+collA.getNumber()); System.out.println("collB的number值:"+collB.getNumber()); System.out.println("==========设置B影响A=========="); collB.setNumber(87635, collA); System.out.println("collB的number值:"+collB.getNumber()); System.out.println("collA的number值:"+collA.getNumber()); } }
Dans le code ci-dessus, la classe A et la classe B sont liées par association directe si nous voulons utiliser le médiateur. modèle, classe A La classe B ne peut pas être directement liée les unes aux autres. Elles doivent passer par un intermédiaire pour atteindre le but de l'association.
abstract class AbstractColleague { protected int number; public int getNumber() { return number; } public void setNumber(int number){ this.number = number; } //注意这里的参数不再是同事类,而是一个中介者 public abstract void setNumber(int number, AbstractMediator am); } class ColleagueA extends AbstractColleague{ public void setNumber(int number, AbstractMediator am) { this.number = number; am.AaffectB(); } } class ColleagueB extends AbstractColleague{ @Override public void setNumber(int number, AbstractMediator am) { this.number = number; am.BaffectA(); } } abstract class AbstractMediator { protected AbstractColleague A; protected AbstractColleague B; public AbstractMediator(AbstractColleague a, AbstractColleague b) { A = a; B = b; } public abstract void AaffectB(); public abstract void BaffectA(); } class Mediator extends AbstractMediator { public Mediator(AbstractColleague a, AbstractColleague b) { super(a, b); } //处理A对B的影响 public void AaffectB() { int number = A.getNumber(); 。 B.setNumber(number*100); } //处理B对A的影响 public void BaffectA() { int number = B.getNumber(); A.setNumber(number/100); } } public class Client { public static void main(String[] args){ AbstractColleague collA = new ColleagueA(); AbstractColleague collB = new ColleagueB(); AbstractMediator am = new Mediator(collA, collB); System.out.println("==========通过设置A影响B=========="); collA.setNumber(1000, am); System.out.println("collA的number值为:"+collA.getNumber()); System.out.println("collB的number值为A的10倍:"+collB.getNumber()); System.out.println("==========通过设置B影响A=========="); collB.setNumber(1000, am); System.out.println("collB的number值为:"+collB.getNumber()); System.out.println("collA的number值为B的0.1倍:"+collA.getNumber()); } }
Bien que le code soit relativement long, il reste relativement facile à comprendre. En fait, il s'agit de ré-encapsuler le code original qui gère. relations d'objets dans une classe intermédiaire. La relation entre les objets est gérée via cette classe intermédiaire.
Avantages du modèle médiateur
Une utilisation appropriée du modèle médiateur peut éviter un couplage excessif entre les classes de collègues, ce qui permet à chaque classe de collègue d'être utilisé de manière relativement indépendante.
L'utilisation du modèle médiateur peut transformer l'association un-à-plusieurs entre les objets en une association un-à-un, rendant la relation entre les objets facile à comprendre et à entretenir.
L'utilisation du modèle médiateur peut faire abstraction du comportement et de la collaboration des objets, et gérer l'interaction entre les objets de manière plus flexible.
Scénarios applicables
En programmation orientée objet, une classe aura inévitablement des dépendances vis-à-vis d'autres classes, et les classes complètement indépendantes n'ont aucun sens. Il est également assez courant qu'une classe dépende de plusieurs classes en même temps. Puisqu'une telle situation existe, cela signifie que la relation de dépendance un-à-plusieurs a sa rationalité. Une utilisation appropriée du modèle médiateur peut rendre l'original désordonné. la relation d'objet est claire, mais si l'abus peut avoir l'effet inverse. De manière générale, le modèle médiateur ne sera considéré que pour des relations à structure en réseau entre classes sociales. Vous pouvez modifier la structure du réseau en une structure en étoile pour rendre la relation entre les classes plus claire.
Le modèle intermédiaire est un modèle couramment utilisé, et c'est aussi un modèle dont on abuse facilement. Dans la plupart des cas, la relation entre les classes collègues ne sera pas aussi compliquée qu'une structure de réseau chaotique. Par conséquent, dans la plupart des cas, il suffit d'encapsuler les dépendances entre les objets à l'intérieur de la classe collègue. Il n'est pas nécessaire d'introduire un intermédiaire ou. mode. Abuser du modèle intermédiaire ne fera que compliquer les choses.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!