Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über das Zwischenmodell in PHP

Eine kurze Diskussion über das Zwischenmodell in PHP

青灯夜游
青灯夜游nach vorne
2021-07-16 20:04:262714Durchsuche

Im vorherigen Artikel „Eine ausführliche Analyse des Kombinationsmodus in PHP“ haben wir den Kombinationsmodus in PHP vorgestellt. Dieser Artikel führt Sie zum Verständnis des Zwischenmodus im PHP-Entwurfsmuster.

Eine kurze Diskussion über das Zwischenmodell in PHP

Wie bereits beim letzten Mal erwähnt, haben diejenigen von uns, die außer Haus arbeiten, oft intensiven Kontakt mit einer Art von Person, nämlich Immobilienmaklern. Die zweite Generation X, die direkt nach ihrem Hochschulabschluss ein Haus in ihrer Lieblingsstadt kaufen kann, fällt nicht in unseren Betrachtungsbereich. Da Sie ein Haus für längere Zeit mieten müssen, müssen Sie sich aufgrund von Veränderungen im Beruf oder im Leben zwangsläufig alle ein bis zwei oder drei bis fünf Jahre an einen Immobilienmakler wenden. Wenn wir ein Haus mieten, kennen wir manchmal nicht unbedingt die Informationen des Vermieters und der Vermieter muss unsere Informationen nicht kennen. Alles wird vom Vermittler abgewickelt. Hier wird der Vermittler zu unserer Kommunikationsbrücke. Diese Situation ist tatsächlich so, als würde der Hausbesitzer ins Ausland gehen oder etwas im Ausland erledigen und das Haus vollständig in die Hände des Vermittlers legen. Ähnlich wie in dieser Situation handelt es sich in der Codewelt um eine typische Anwendung des Mediatormusters.

Gof-Klassendiagramm und Erklärung

GoF-Definition: Verwenden Sie ein Zwischenobjekt, um eine Reihe von Objektinteraktionen zu kapseln. Mediatoren verhindern, dass Objekte explizit aufeinander verweisen, wodurch sie die Interaktionen zwischen ihnen unabhängig voneinander ändern können. Hier gehen wir davon aus, dass es zwei feste Kollegenklassen gibt, und lassen sie daher miteinander kommunizieren , wenn der eingehende Kollege 1 ist, wird die Notify-Methode von 2 aufgerufen, was dem Empfangenlassen von 2 entspricht. Wenn es um die Nachricht von 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);
        }
    }
}
der Kollegenklasse und deren spezifische Implementierung geht, müssen wir hier eines bestätigen dass jede Kollegenklasse nur den Vermittler kennt und keine anderen Kollegenklassen kennt. Dies ist das Merkmal des Vermittlers. Beide Parteien müssen sich nicht kennen.

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;
    }
}

Der Kundenanruf ist relativ einfach!

Haben Sie das Gefühl, dass dieses Modell für die Herstellung einiger Kommunikationsprodukte sehr gut geeignet ist? Ja, Social Chat, SNS, Live-Übertragung usw. sind alle geeignet, da dieses Modell Benutzer voneinander entkoppeln kann und kein Benutzer alle zugehörigen Benutzerobjekte verwalten muss

Eine kurze Diskussion über das Zwischenmodell in PHPDa dies für Benutzer nicht erforderlich ist Pflegen Sie Beziehungen, sodass auch das Problem der Viele-zu-Viele-Pflege zwischen Beziehungen gelöst wird. Gleichzeitig ist es nicht erforderlich, die Benutzerklasse zu ändern, um die Beziehung zu ändern, wodurch eine gute Kapselung der Benutzerklasse aufrechterhalten wird Der Vermittler zentralisiert die Wartung. Dies kann dazu führen, dass diese Klasse zu komplex und zu groß ist. Das Muster ist also kein Allheilmittel. Sie müssen das Geschäftsszenario verstehen und angemessen verwenden. Der Vermittler eignet sich für Situationen, in denen eine Gruppe von Objekten kommuniziert Eine klar definierte, aber komplexe Methode, und wenn Sie ein in mehrere Klassen verteiltes Verhalten anpassen möchten, ohne zu viele Unterklassen zu generieren Vermittler. Aus organisatorischer Sicht muss ich mich als Chef zu Beginn und am Ende eines Projekts nicht darum kümmern, wer die Codierung übernimmt. Die Person, mit der ich kommunizieren möchte, ist nur der Projektmanager. In gleicher Weise umfassen andere Hilfsabteilungen Finanzen, Personalwesen, Verwaltung usw. Es ist ihnen egal, wer den Code schreibt, sondern sie müssen nur mit dem Projektmanager kommunizieren, um den Status des Projekts zu verstehen und zu verstehen, was koordiniert werden muss. Was ist im Projektteam mit den Leuten, die Code schreiben? Es ist nicht erforderlich zu wissen, wer ihm den Lohn zahlt oder wo das Anwesenheitsproblem liegt. All diese Probleme können vom Projektmanager gelöst werden. Daher ist die Projektentwicklung im Rahmen des Projektmanagerverantwortungssystems eine typische Anwendung des Vermittlermodells. Der Grund, warum sich unsere Mobiltelefonfabrik so schnell entwickelt, ist diesen Projektmanagern zu verdanken. Gönnen wir ihnen abends ein großes Abendessen~~~

Vollständiger Code: https://github.com/zhangyue0503/designpatterns- php/blob/master/15.mediator/source/mediator.php

Beispiel

Dieses Mal werden wir keine Textnachrichten senden, sondern einen Chatroom implementieren. Die Voraussetzung für einen einfachen Online-Chatroom besteht darin, dass Benutzer, die den Chatroom betreten, online chatten können. Schauen wir uns an, wie dieser Chatroom im Vermittlermodus implementiert wird!
  • Chatroom-Klassendiagramm
  • Vollständiger Quellcode: 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("没有呢,你打算请客?");

Anleitung

  • Ist Ihnen aufgefallen, dass der Vermittler dieser „Chatraum“ ist, der Informationen übermittelt?
  • Da die Anzahl der Benutzer hier nicht festgelegt ist, wird sie in einem Array gespeichert, wenn ein Benutzer eine Nachricht sendet, außer ihm selbst else hat diese Nachricht erhalten
  • Benutzer können den Chatraum frei betreten und verlassen. Ehrlich gesagt sieht dieses Beispiel wirklich wie eine Chat-Anwendung aus, die ihre Funktionen fast realisiert hat. Wie erwartet eignet sich das Vermittlermodell wirklich für die Kommunikationsanwendung Wenn jedoch sehr viele Benutzer teilnehmen, wird die $users-Liste immer aufgeblähter. Dies ist das Problem mit dem oben erwähnten Vermittlermodell. Originaladresse: https://juejin.cn /post/6844903975192363015
  • Autor: Hardcore Project Manager
Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über das Zwischenmodell in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen