Maison > développement back-end > tutoriel php > Une brève discussion sur le modèle intermédiaire en PHP

Une brève discussion sur le modèle intermédiaire en PHP

青灯夜游
Libérer: 2023-04-10 11:24:01
avant
2844 Les gens l'ont consulté

Dans l'article précédent "Une analyse approfondie du mode combinaison en PHP", nous avons présenté le mode combinaison en PHP. Cet article vous amènera à comprendre le mode intermédiaire dans le modèle de conception PHP.

Une brève discussion sur le modèle intermédiaire en PHP

Comme mentionné la dernière fois, ceux d'entre nous qui travaillent à l'extérieur de la maison ont souvent des contacts profonds avec un type de personne, à savoir les agents immobiliers. La deuxième génération X qui peut acheter une maison dans sa ville préférée juste après avoir obtenu son diplôme universitaire n'entre pas dans le champ de notre réflexion. Comme vous devez louer une maison pour une longue période, vous devrez inévitablement faire affaire avec un agent immobilier tous les un ou deux ou trois à cinq ans en raison de changements dans votre travail ou dans votre vie. Parfois, lorsque nous louons une maison, nous ne connaissons pas forcément les informations du propriétaire, et le propriétaire n'a pas besoin de connaître nos informations. Tout est géré par l'intermédiaire. Ici, l'intermédiaire devient notre pont de communication. Cette situation est en fait comme si le propriétaire partait à l'étranger ou avait quelque chose à faire à l'étranger et laissait la maison entièrement entre les mains de l'intermédiaire. Semblable à cette situation, dans le monde des codes, il s’agit d’une application typique du modèle médiateur.

Diagramme de classes Gof et explication

Définition GoF : utilisez un objet intermédiaire pour encapsuler une série d'interactions d'objets. Les médiateurs empêchent les objets de se référencer explicitement, ce qui les rend faiblement couplés et leur permet de modifier indépendamment les interactions entre eux. Intermédiaire abstrait et implémentation concrète. Ici, nous supposons qu'il existe deux classes collègues fixes et les laissons donc se parler. , lorsque le collègue entrant est 1, la méthode Notify de 2 est appelée, ce qui équivaut à laisser 2 recevoir. En ce qui concerne le message de 1

abstract class Mediator
{
    abstract public function Send(String $message, Colleague $colleague);
}

class ConcreteMediator extends Mediator
{
    public $colleague1;
    public $colleague2;

    public function Send(String $message, Colleague $colleague)
    {
        if ($colleague == $this->colleague1) {
            $this->colleague2->Notify($message);
        } else {
            $this->colleague1->Notify($message);
        }
    }
}
Copier après la connexion
la classe de collègue et son implémentation spécifique, une chose que nous devons confirmer ici est que chaque classe collègue ne connaît que l'intermédiaire et ne connaît pas les autres classes collègues. C'est la caractéristique de l'intermédiaire. Les deux parties n'ont pas besoin de se connaître.

abstract class Colleague
{
    protected $mediator;
    public function __construct(Mediator $mediator)
    {
        $this->mediator = $mediator;
    }

}

class ConcreteColleague1 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事1得到信息:" . $message, PHP_EOL;
    }
}

class ConcreteColleague2 extends Colleague
{
    public function Send(String $message)
    {
        $this->mediator->Send($message, $this);
    }
    public function Notify(String $message)
    {
        echo "同事2得到信息:" . $message;
    }
}
Copier après la connexion

L'appel client est relativement simple !

Pensez-vous que ce modèle soit très adapté à la réalisation de certains produits de communication ? Oui, le chat social, les SNS, la diffusion en direct, etc. conviennent tous, car ce modèle peut dissocier les utilisateurs les uns des autres, et il n'est pas nécessaire qu'un utilisateur gère tous les objets utilisateur associés

Une brève discussion sur le modèle intermédiaire en PHPParce qu'il n'est pas nécessaire pour les utilisateurs de Maintenir les relations, cela résout également le problème de la maintenance plusieurs-à-plusieurs entre les relations. En même temps, il n'est pas nécessaire de modifier la classe d'utilisateurs pour changer la relation, ce qui permet de maintenir une bonne encapsulation de la classe d'utilisateurs

Cependant, le l'intermédiaire centralise la maintenance Cela peut rendre cette classe trop complexe et trop grandeDonc, le modèle n'est pas une panacée, vous devez comprendre le scénario métier et l'utiliser de manière appropriée

Le médiateur convient aux situations où un groupe d'objets communique dans d'une manière bien définie mais complexe, et lorsque l'on souhaite personnaliser un comportement réparti dans plusieurs classes sans générer trop de sous-classes

En tant qu'entrepreneur, je connais l'importance de la gestion de projet, et le chef de projet est un rôle de intermédiaire. D'un point de vue organisationnel, au début et à la fin d'un projet, en tant que patron, je n'ai pas besoin de me soucier de savoir qui fait le codage. La personne avec qui je veux communiquer est simplement le chef de projet. De la même manière, les autres départements auxiliaires incluent les finances, les ressources humaines, l'administration, etc. Ils ne se soucient pas de savoir qui écrit le code, mais ont seulement besoin de communiquer avec le chef de projet pour comprendre l'état du projet et ce qui doit être coordonné. Dans l’équipe projet, qu’en est-il des personnes qui écrivent le code ? Il n'est pas nécessaire de savoir qui lui paiera son salaire ni où se situe le problème de fréquentation. Tout cela peut être résolu par le chef de projet. Par conséquent, le développement de projets sous le système de responsabilité du chef de projet est une application typique du modèle intermédiaire. La raison pour laquelle notre usine de téléphones portables se développe si rapidement est grâce à ces chefs de projet. Offrez-leur un grand dîner le soir ~~~

  • Code complet : https://github.com/zhangyue0503/designpatterns-. php/blob/master/15.mediator/source/mediator.php
  • Exemple
  • Cette fois, nous n'enverrons pas de messages texte, mettons en place un salon de discussion. L'exigence d'un salon de discussion en ligne simple est de permettre aux utilisateurs qui entrent dans le salon de discussion de discuter en ligne. Voyons comment mettre en œuvre ce salon de discussion en utilisant le mode intermédiaire !

Diagramme des classes de salle de discussion

Code source complet : https://github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator-webchat.php

$m = new ConcreteMediator();

$c1 = new ConcreteColleague1($m);
$c2 = new ConcreteColleague2($m);

$m->colleague1 = $c1;
$m->colleague2 = $c2;

$c1->Send("吃过饭了吗?");
$c2->Send("没有呢,你打算请客?");
Copier après la connexion
Instructions

  • Avez-vous remarqué que l'intermédiaire est ce "chat room", qui transmet et transfère les informations ?
  • Le nombre d'utilisateurs n'étant pas ici fixé, il est maintenu dans un tableau lorsqu'un utilisateur envoie un message, sauf lui-même. , Tout le monde a reçu ce message
  • Les utilisateurs peuvent entrer et sortir librement du salon de discussion. Pour être honnête, cet exemple ressemble vraiment à une application de chat qui a presque implémenté ses fonctions
  • Effectivement, le modèle intermédiaire est vraiment adapté à la communication. .Application, cependant, s'il y a de très nombreux utilisateurs entrants, la liste $users deviendra de plus en plus gonflée. C'est le problème avec le modèle intermédiaire mentionné ci-dessus

Adresse originale : https://juejin.cn /post. /6844903975192363015

Auteur : Hardcore Project Manager

Apprentissage recommandé : "Tutoriel vidéo PHP"

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!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal