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.
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-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); } } }
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 mussDa 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!$m = new ConcreteMediator(); $c1 = new ConcreteColleague1($m); $c2 = new ConcreteColleague2($m); $m->colleague1 = $c1; $m->colleague2 = $c2; $c1->Send("吃过饭了吗?"); $c2->Send("没有呢,你打算请客?");
Anleitung
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!