


Advanced object-oriented design patterns in PHP: Mediator pattern usage examples
What is the intermediary pattern?
The mediator pattern is used to develop an object that can transmit or mediate modifications to a collection of similar objects without directly interacting with each other. Generally, when dealing with uncoupled objects with similar properties that need to be kept synchronized, the best approach is the mediator pattern. A design pattern that is not particularly commonly used in PHP.
Mode motivation:
1. In the design scheme where users chat directly with users, there is a strong correlation between user objects, which will cause the system to appear as follows Problem:
The system structure is complex: there are a large number of interrelationships and calls between objects. If one object changes, all other objects associated with the object need to be tracked and processed appropriately.
2. Poor object reusability: Since an object has a strong relationship with other objects, without the support of other objects, it is difficult for an object to be reused by another system or module. These objects behave more like An indivisible whole with confusing responsibilities.
3. System scalability is low: adding a new object requires adding references to the original related objects, and adding new reference relationships also requires adjusting the original objects. The system coupling is very high, and object operations are very inflexible. , poor scalability.
4. In the object-oriented software design and development process, according to the "single responsibility principle", we should try to refine the object so that it is only responsible for or presents a single responsibility.
5. For a module, it may be composed of many objects, and there may be mutual references between these objects. In order to reduce the complex reference relationship between objects and make it a loosely coupled system, We need to use the mediator pattern, and this is the pattern motivation of the mediator pattern.
UML
This UML diagram illustrates a class design using the mediator design pattern
The following is Explanation of the above picture:
1. There are two similar classes in the picture: MyObjectA and MyObjectB. The appearance of both classes is the same. Their difference may be the identifier represented by the private variable identifier. Furthermore, all functions are similar.
2. During object creation, the instance of MyObjectMediator is stored internally. Subsequently, if a change is requested for an object by calling the public method cahngeIdentifier(), the parameter newID can be applied to the object by updating the private identifier string. Next, call the protected method notifyMediator() to apply mediation to other objects.
3.MyObjectMediator is the center of a series of objects. These objects are stored in the array MyObjectsToMediate. MyObjectsToMediate will execute the myObjectChanged() method when it receives the notification, which is responsible for parsing the array MyObjectsToMediate and applying the specified changes to all other objects.
Use an intermediary object to encapsulate a series of object interactions so that each object does not need to explicitly reference each other, thereby loosening the coupling, and the interaction between them can be changed independently
<?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");
The above is the detailed content of Advanced object-oriented design patterns in PHP: Mediator pattern usage examples. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
