Maison  >  Article  >  développement back-end  >  Modèles de conception avancés orientés objet en PHP : exemples d'utilisation de modèles Mediator

Modèles de conception avancés orientés objet en PHP : exemples d'utilisation de modèles Mediator

巴扎黑
巴扎黑original
2017-05-23 13:45:521134parcourir

Qu'est-ce que le modèle intermédiaire ?

Le modèle Mediator est utilisé pour développer un objet qui peut transmettre ou arbitrer des modifications sur une collection d'objets similaires sans communiquer directement entre eux. Généralement, lorsqu'il s'agit d'objets non couplés ayant des propriétés similaires qui doivent rester synchronisés, la meilleure approche est le modèle médiateur. Un modèle de conception qui n’est pas particulièrement utilisé en PHP.

Motivation du modèle :

1. Dans le schéma de conception du chat direct entre utilisateurs, il existe une forte corrélation entre les objets utilisateur, ce qui fera apparaître le système comme suit Problème :

La structure du système est complexe : il existe un grand nombre de relations et d'appels entre les objets. Si un objet change, tous les autres objets associés à l'objet doivent être suivis et traités de manière appropriée.

2. Mauvaise réutilisabilité des objets : Puisqu'un objet a une relation forte avec d'autres objets, sans le support d'autres objets, il est difficile pour un objet d'être réutilisé par un autre système ou module. Un tout indivisible aux responsabilités confuses.

3. L'évolutivité du système est faible : l'ajout d'un nouvel objet nécessite l'ajout de références aux objets associés d'origine, et l'ajout de nouvelles relations de référence nécessite également d'ajuster les objets d'origine. Le couplage du système est très élevé et les opérations sur les objets sont très élevées. inflexible, mauvaise évolutivité.

4. Dans le processus de conception et de développement de logiciels orientés objet, selon le « principe de responsabilité unique », nous devrions essayer d'affiner l'objet afin qu'il ne soit responsable ou ne présente qu'une seule responsabilité.

5. Pour un module, il peut être composé de nombreux objets, et il peut y avoir des références mutuelles entre ces objets. Afin de réduire la relation de référence complexe entre les objets et d'en faire un système faiblement couplé, nous avons besoin. d'utiliser le modèle médiateur, et c'est la motivation du modèle médiateur.

UML

Ce diagramme UML illustre une conception de classe utilisant le modèle de conception médiateur

Modèles de conception avancés orientés objet en PHP : exemples dutilisation de modèles Mediator

Ce qui suit est l'explication de l'image ci-dessus :

1 Il y a deux classes similaires dans l'image : MyObjectA et MyObjectB. L'apparence des deux classes est la même. Leur différence peut être l'identifiant représenté par l'identifiant de la variable privée. De plus, toutes les fonctions sont similaires.

2. Lors de la création de l'objet, l'instance de MyObjectMediator est stockée en interne. Par la suite, si une modification est demandée pour un objet en appelant la méthode publique cahngeIdentifier(), le paramètre newID peut être appliqué à l'objet en mettant à jour la chaîne d'identifiant privé. Ensuite, appelez la méthode protégée notifyMediator() pour appliquer la médiation à d'autres objets.

3.MyObjectMediator est le centre d'une série d'objets. Ces objets sont stockés dans le tableau MyObjectsToMediate. MyObjectsToMediate exécutera la méthode myObjectChanged() lorsqu'elle recevra la notification, qui est responsable de l'analyse du tableau MyObjectsToMediate et de l'application des modifications spécifiées à tous les autres objets.

Utilisez un objet intermédiaire pour encapsuler une série d'interactions d'objets, de sorte que chaque objet n'ait pas besoin de se référencer explicitement, desserrant ainsi le couplage, et que l'interaction entre eux puisse être modifiée indépendamment

<?php
/**
* 中介者模式
*
* 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互
*/
abstract class Mediator
{
abstract public function send($message,$colleague);
}
abstract class Colleague
{
private $_mediator = null;
public function Colleague($mediator)
{
$this->_mediator = $mediator;
}
public function send($message)
{
$this->_mediator->send($message,$this);
}
abstract public function notify($message);
}
class ConcreteMediator extends Mediator
{
private $_colleague1 = null;
private $_colleague2 = null;
public function send($message,$colleague)
{
if($colleague == $this->_colleague1)
{
$this->_colleague1->notify($message);
} else {
$this->_colleague2->notify($message);
}
}
public function set($colleague1,$colleague2)
{
$this->_colleague1 = $colleague1;
$this->_colleague2 = $colleague2;
}
}
class Colleague1 extends Colleague
{
public function notify($message)
{
echo "Colleague1 Message is :".$message."<br/>";
}
}
class Colleague2 extends Colleague
{
public function notify($message)
{
echo "Colleague2 Message is :".$message."<br/>";
}
}
//
$objMediator = new ConcreteMediator();
$objC1 = new Colleague1($objMediator);
$objC2 = new Colleague2($objMediator);
$objMediator->set($objC1,$objC2);
$objC1->send("to c2 from c1");
$objC2->send("to c1 from c2");

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn