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

浅谈PHP设计模式的中介者模式

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
简介:

中介者模式,属于行为型的设计模式。用一个中介对象来封装一系列的对象交互。中介者是各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
适用场景:

如果平行对象间的依赖复杂,可以使用中介者解耦。
优点:

符合迪米特法则,减少成员间的依赖。
缺点:

不适用于系统出现对象多对多的的复杂场景时。
代码:
  1. *Mediator接口声明了组件用于向*中介通知各种事件的方法。中介可能会对这些事件做出反应,并将执行传递给其他组件。
  2. */
  3. interface Mediator
  4. {
  5.     public function notify(object $sender, string $event): void;
  6. }
  7. /**
  8. *具体中介通过协调几个组件来实现协作行为。
  9. */
  10. class ConcreteMediator implements Mediator
  11. {
  12.     private $component1;
  13.     private $component2;
  14.     public function __construct(Component1 $c1, Component2 $c2)
  15.     {
  16.         $this->component1 = $c1;
  17.         $this->component1->setMediator($this);
  18.         $this->component2 = $c2;
  19.         $this->component2->setMediator($this);
  20.     }
  21.     public function notify(object $sender, string $event): void
  22.     {
  23.         if ($event == "A") {
  24.             echo "中介者对A作出反应并触发以下操作:\n";
  25.             $this->component2->doC();
  26.         }
  27.         if ($event == "D") {
  28.             echo "中介者对D作出反应并触发以下操作:\n";
  29.             $this->component1->doB();
  30.             $this->component2->doC();
  31.         }
  32.     }
  33. }
  34. /**
  35. *基本组件提供了在组件对象内存储中介器*实例的基本功能。
  36. */
  37. class BaseComponent
  38. {
  39.     protected $mediator;
  40.     public function __construct(Mediator $mediator = null)
  41.     {
  42.         $this->mediator = $mediator;
  43.     }
  44.     public function setMediator(Mediator $mediator): void
  45.     {
  46.         $this->mediator = $mediator;
  47.     }
  48. }
  49. /**
  50. *具体组件实现各种功能。它们不依赖于其他组件。它们也不依赖于任何具体的中介类
  51. */
  52. class Component1 extends BaseComponent
  53. {
  54.     public function doA(): void
  55.     {
  56.         echo "Component 1 does A.\n";
  57.         $this->mediator->notify($this, "A");
  58.     }
  59.     public function doB(): void
  60.     {
  61.         echo "Component 1 does B.\n";
  62.         $this->mediator->notify($this, "B");
  63.     }
  64. }
  65. class Component2 extends BaseComponent
  66. {
  67.     public function doC(): void
  68.     {
  69.         echo "Component 2 does C.\n";
  70.         $this->mediator->notify($this, "C");
  71.     }
  72.     public function doD(): void
  73.     {
  74.         echo "Component 2 does D.\n";
  75.         $this->mediator->notify($this, "D");
  76.     }
  77. }
  78. //调用端
  79. $c1 = new Component1();
  80. $c2 = new Component2();
  81. $mediator = new ConcreteMediator($c1, $c2);
  82. echo "客户端触发操作A。\n";
  83. $c1->doA();
  84. echo "\n";
  85. echo "客户端触发操作D。\n";
  86. $c2->doD();
复制代码
来源:https://www.cnblogs.com/phpphp/p/17067933.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具