Was ist das Vermittlermodell?
Das Mediator-Muster wird verwendet, um ein Objekt zu entwickeln, das Änderungen an einer Sammlung ähnlicher Objekte übertragen oder vermitteln kann, ohne direkt miteinander zu kommunizieren. Wenn es sich um entkoppelte Objekte mit ähnlichen Eigenschaften handelt, die synchron gehalten werden müssen, ist im Allgemeinen das Mediatormuster der beste Ansatz. Ein Entwurfsmuster, das in PHP nicht besonders häufig verwendet wird.
Modellmotivation:
1. Im Entwurfsschema des direkten Chats zwischen Benutzern besteht eine starke Korrelation zwischen Benutzerobjekten, was dazu führt, dass das System so aussieht folgt Problem:
Die Systemstruktur ist komplex: Es gibt eine Vielzahl von Zusammenhängen und Aufrufen zwischen Objekten. Wenn sich ein Objekt ändert, müssen alle anderen mit dem Objekt verbundenen Objekte entsprechend verfolgt und verarbeitet werden.
2. Schlechte Wiederverwendbarkeit von Objekten: Da ein Objekt eine starke Beziehung zu anderen Objekten hat, ist es für ein Objekt ohne die Unterstützung anderer Objekte schwierig, von einem anderen System oder Modul wiederverwendet zu werden Ein unteilbares Ganzes mit verwirrenden Verantwortlichkeiten.
3. Die Skalierbarkeit des Systems ist gering: Das Hinzufügen eines neuen Objekts erfordert das Hinzufügen von Verweisen auf die ursprünglichen zugehörigen Objekte, und das Hinzufügen neuer Referenzbeziehungen erfordert auch eine Anpassung der ursprünglichen Objekte. Die Systemkopplung ist sehr hoch und die Objektoperationen sind sehr hoch unflexibel, schlechte Skalierbarkeit.
4. Im objektorientierten Softwaredesign- und Entwicklungsprozess sollten wir gemäß dem „Prinzip der Einzelverantwortung“ versuchen, das Objekt so zu verfeinern, dass es nur für eine einzelne Verantwortung verantwortlich ist oder diese darstellt.
5. Ein Modul kann aus vielen Objekten bestehen und es kann gegenseitige Referenzen zwischen diesen Objekten geben. Um die komplexe Referenzbeziehung zwischen Objekten zu reduzieren und es zu einem lose gekoppelten System zu machen, benötigen wir das Vermittlermuster zu verwenden, und das ist die Mustermotivation des Vermittlermusters.
UML
Dieses UML-Diagramm veranschaulicht einen Klassenentwurf unter Verwendung des Mediator-Entwurfsmusters
Das Folgende ist eine Erklärung des obigen Bildes:
1. Es gibt zwei ähnliche Klassen im Bild: MyObjectA und MyObjectB. Das Erscheinungsbild beider Klassen ist gleich. Ihr Unterschied kann der Bezeichner sein, der durch den Bezeichner der privaten Variablen dargestellt wird. Darüber hinaus sind alle Funktionen ähnlich.
2. Während der Objekterstellung wird die Instanz von MyObjectMediator intern gespeichert. Wenn anschließend eine Änderung für ein Objekt durch Aufruf der öffentlichen Methode cahngeIdentifier() angefordert wird, kann der Parameter newID durch Aktualisieren der privaten Kennungszeichenfolge auf das Objekt angewendet werden. Rufen Sie als Nächstes die geschützte Methode notifyMediator() auf, um die Mediation auf andere Objekte anzuwenden.
3.MyObjectMediator ist das Zentrum einer Reihe von Objekten. Diese Objekte werden im Array MyObjectsToMediate gespeichert. MyObjectsToMediate führt beim Empfang der Benachrichtigung die Methode myObjectChanged() aus, die für das Parsen des Arrays MyObjectsToMediate und die Anwendung der angegebenen Änderungen auf alle anderen Objekte verantwortlich ist.
Verwenden Sie ein Zwischenobjekt, um eine Reihe von Objektinteraktionen zu kapseln, sodass nicht jedes Objekt explizit aufeinander verweisen muss, wodurch die Kopplung gelockert wird und die Interaktion zwischen ihnen unabhängig geändert werden kann
<?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");
Das obige ist der detaillierte Inhalt vonPHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Vermittlermustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!