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

yizhihongxing

简介:

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

适用场景:

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

优点:

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

缺点:

不适用于系统出现对象多对多的的复杂场景时。

代码:

 *Mediator接口声明了组件用于向*中介通知各种事件的方法。中介可能会对这些事件做出反应,并将执行传递给其他组件。
 */
interface Mediator
{
    public function notify(object $sender, string $event): void;
}

/**
 *具体中介通过协调几个组件来实现协作行为。
 */
class ConcreteMediator implements Mediator
{
    private $component1;

    private $component2;

    public function __construct(Component1 $c1, Component2 $c2)
    {
        $this->component1 = $c1;
        $this->component1->setMediator($this);
        $this->component2 = $c2;
        $this->component2->setMediator($this);
    }

    public function notify(object $sender, string $event): void
    {
        if ($event == "A") {
            echo "中介者对A作出反应并触发以下操作:\n";
            $this->component2->doC();
        }

        if ($event == "D") {
            echo "中介者对D作出反应并触发以下操作:\n";
            $this->component1->doB();
            $this->component2->doC();
        }
    }
}

/**
 *基本组件提供了在组件对象内存储中介器*实例的基本功能。
 */
class BaseComponent
{
    protected $mediator;

    public function __construct(Mediator $mediator = null)
    {
        $this->mediator = $mediator;
    }

    public function setMediator(Mediator $mediator): void
    {
        $this->mediator = $mediator;
    }
}

/**
 *具体组件实现各种功能。它们不依赖于其他组件。它们也不依赖于任何具体的中介类
 */
class Component1 extends BaseComponent
{
    public function doA(): void
    {
        echo "Component 1 does A.\n";
        $this->mediator->notify($this, "A");
    }

    public function doB(): void
    {
        echo "Component 1 does B.\n";
        $this->mediator->notify($this, "B");
    }
}

class Component2 extends BaseComponent
{
    public function doC(): void
    {
        echo "Component 2 does C.\n";
        $this->mediator->notify($this, "C");
    }

    public function doD(): void
    {
        echo "Component 2 does D.\n";
        $this->mediator->notify($this, "D");
    }
}

//调用端
$c1 = new Component1();
$c2 = new Component2();
$mediator = new ConcreteMediator($c1, $c2);

echo "客户端触发操作A。\n";
$c1->doA();

echo "\n";
echo "客户端触发操作D。\n";
$c2->doD();

原文链接:https://www.cnblogs.com/phpphp/p/17067933.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈PHP设计模式的中介者模式 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • PHP实现页面静态化深入讲解

    下面我将详细讲解“PHP实现页面静态化深入讲解”的完整攻略。 什么是页面静态化 页面静态化,即将动态生成的网页内容转换为静态HTML文件,这样一来,用户在访问该网站时,直接访问静态HTML文件,而不需要再经过后台的渲染和计算等操作,从而大大提高了网页的访问速度。 PHP实现页面静态化的方式 PHP实现页面静态化有多种方式,下面我将介绍其中的两种: 1. 使用…

    PHP 2023年5月26日
    00
  • php多数据库支持的应用程序设计

    下面我将详细讲解如何设计支持多数据库的 PHP 应用程序的完整攻略。 什么是 PHP 多数据库支持? 通常情况下,一个 PHP 程序只支持连接一个数据库,然而有些企业或项目需要连接多个数据库,这就需要 PHP 应用程序支持多种数据库类型(如 MySQL、Oracle、SQL Server 等),这就是 PHP 多数据库支持。 如何实现 PHP 多数据库支持?…

    PHP 2023年5月24日
    00
  • 微信小程序用户自定义模版用法实例分析

    微信小程序用户自定义模版用法实例分析 什么是微信小程序用户自定义模版 微信小程序用户自定义模版是指开发者在小程序后台创建自己的模版,并在创建小程序时将其设为基础模版,从而让开发者使用该模版开发小程序,简化了小程序开发的流程。 如何创建微信小程序用户自定义模版 打开微信公众平台,进入小程序管理后台,点击创建小程序按钮。 在创建小程序页面中,选择基础库版本,上传…

    PHP 2023年5月30日
    00
  • PHP生成短网址的3种方法代码实例

    下面我来为你详细讲解“PHP生成短网址的3种方法代码实例”的完整攻略。 一、背景介绍 短网址是将长网址转换为短的URL地址,以便在文本消息、微博等场合使用,简化URL长度。PHP作为一种常用的编程语言,可以通过各种方式来实现生成短网址。下面我将介绍三种常见的方法。 二、使用网址缩短服务 第一种方法是使用外部网址缩短服务。这种方式非常简单,只需要调用外部提供的…

    PHP 2023年5月23日
    00
  • Win2003服务器高安全配置(冰盾防火墙设置方法)

    Win2003服务器高安全配置(冰盾防火墙设置方法) 什么是“冰盾防火墙” “冰盾防火墙”是一款基于Windows操作系统的防火墙软件,具有易用性和强大的功能特点,主要用于保护服务器和PC机的安全。 冰盾防火墙设置方法 以下是Win2003服务器上使用冰盾防火墙进行高安全配置的具体步骤: 步骤一:下载和安装冰盾防火墙软件 打开“http://www.icef…

    PHP 2023年5月27日
    00
  • PHP常用字符串函数用法实例总结

    PHP常用字符串函数用法实例总结 本文主要介绍PHP常用的字符串处理函数,并给出一些实例说明。 strlen() strlen() 函数用于计算一个字符串的长度,返回值为字符串的长度。 示例1:获取字符串的长度 $str = "Hello, World!"; $length = strlen($str); echo "字符串 ‘…

    PHP 2023年5月26日
    00
  • CVE-2020-15148漏洞分析

    下面是“CVE-2020-15148漏洞分析”的完整使用攻略,包括漏洞描述、漏洞分析、漏洞利用和两个示例说明。 漏洞描述 CVE-2020-15148是一个影响OpenSMTPD的远程代码执行漏洞。攻击者可以通过发送恶意的SMTP邮件来利用此漏洞,从而在目标系统上执行任意代码。 漏洞分析 OpenSMTPD是一个开源的服务器,用于发送和接收电子邮件。CVE-…

    PHP 2023年5月12日
    00
  • PHP SFTP实现上传下载功能

    下面是详细讲解“PHP SFTP实现上传下载功能”的完整攻略。 什么是SFTP SFTP是Secure File Transfer Protocol的缩写,它是一种安全的FTP传输协议,可以保护文件传输过程中的安全性。 SFTP与普通的FTP协议不同的是,它是基于SSH协议的,使用SSH协议的加密和验证机制对数据进行加密和保护,确保数据的安全性。 SFTP的…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部