翼度科技»论坛 编程开发 PHP 查看内容

PHP设计模式之中介者模式浅析

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
中介者模式

中介者模式(Mediator Pattern)是一种常用的设计模式,用于解决各个对象之间的复杂依赖关系,使得各个对象之间可以独立地改变自己的行为,而不需要与其他对象发生直接的交互。中介者模式通过引入中介者对象来封装一系列的对象交互,中介者对象可以协调各个对象之间的行为,从而减少对象之间的耦合度。 中介者模式包含以下角色:

  • 抽象中介者(Mediator):定义了各个对象之间的通信接口,可以是抽象类或接口。
  • 具体中介者(ConcreteMediator):实现抽象中介者接口,负责协调各个对象之间的通信。
  • 抽象同事类(Colleague):定义了各个对象之间的通信接口,可以是抽象类或接口。
  • 具体同事类(ConcreteColleague):实现抽象同事类接口,维护与其他对象之间的通信关系。

PHP中的中介者模式

PHP中的中介者模式可以通过实现抽象中介者和抽象同事类来实现。下面是一个简单的示例:
  1. <?php
  2. // 抽象中介者
  3. abstract class Mediator
  4. {
  5.     abstract public function send($message, $colleague);
  6. }
  7. // 抽象同事类
  8. abstract class Colleague
  9. {
  10.     protected $mediator;
  11.     public function __construct(Mediator $mediator)
  12.     {
  13.         $this->mediator = $mediator;
  14.     }
  15.     abstract public function send($message);
  16.     abstract public function receive($message);
  17. }
  18. // 具体中介者
  19. class ConcreteMediator extends Mediator
  20. {
  21.     private $colleague1;
  22.     private $colleague2;
  23.     public function setColleague1(Colleague $colleague)
  24.     {
  25.         $this->colleague1 = $colleague;
  26.     }
  27.     public function setColleague2(Colleague $colleague)
  28.     {
  29.         $this->colleague2 = $colleague;
  30.     }
  31.     public function send($message, $colleague)
  32.     {
  33.         if ($colleague == $this->colleague1) {
  34.             $this->colleague2->receive($message);
  35.         } else {
  36.             $this->colleague1->receive($message);
  37.         }
  38.     }
  39. }
  40. // 具体同事类
  41. class ConcreteColleague1 extends Colleague
  42. {
  43.     public function send($message)
  44.     {
  45.         $this->mediator->send($message, $this);
  46.     }
  47.     public function receive($message)
  48.     {
  49.         echo "ConcreteColleague1 received message: $message\n";
  50.     }
  51. }
  52. class ConcreteColleague2 extends Colleague
  53. {
  54.     public function send($message)
  55.     {
  56.         $this->mediator->send($message, $this);
  57.     }
  58.     public function receive($message)
  59.     {
  60.         echo "ConcreteColleague2 received message: $message\n";
  61.     }
  62. }
复制代码
以上代码中,我们定义了抽象中介者
  1. Mediator
复制代码
和抽象同事类
  1. Colleague
复制代码
,并分别实现了具体中介者
  1. ConcreteMediator
复制代码
和具体同事类
  1. ConcreteColleague1
复制代码
  1. ConcreteColleague2
复制代码
。在具体中介者
  1. ConcreteMediator
复制代码
中保存了两个具体同事类的引用,通过
  1. send()
复制代码
方法来实现两个具体同事类之间的通信。具体同事类中实现了
  1. send()
复制代码
  1. receive()
复制代码
方法,通过中介者来发送和接收消息。 我们可以使用以下代码来测试中介者模式:
  1. <?php
  2. $mediator = new ConcreteMediator;
  3. $colleague1 = new ConcreteColleague1($mediator);
  4. $colleague2 = new ConcreteColleague2($mediator);
  5. $mediator->setColleague1($colleague1);
  6. $mediator->setColleague2($colleague2);
  7. $colleague1->send("Hello, colleague2!");
  8. $colleague2->send("Hi, colleague1!");
复制代码
输出结果:
  1. ConcreteColleague2 received message: Hello, colleague2!
  2. ConcreteColleague1 received message: Hi, colleague1!
复制代码
以上就是PHP中中介者模式的简单介绍,希望对你有所帮助。
到此这篇关于PHP设计模式之中介者模式浅析的文章就介绍到这了,更多相关PHP中介者模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/280269.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具