浅谈PHP设计模式的门面模式

简介:

门面模式又称之为外观模式,属于结构型的设计模式。
用于为子系统中的一组接口提供一致的调用方案。门面模式定义了一个高层接口,引入门面角色之后,只需要直接与门面角色交互,降低了系统的耦合度。

适用场景:

  1. 最经典的Laravel的Facade,当使用一些库的时候,不需要了解底层系统如何实现,只需要知道如何使用门面调用即可。
  2. 为一些复杂的子系统提供一个简单对外开放的调用方案。

优点:

  1. 对客户端,屏蔽了子系统的实现逻辑,只留出可供使用的方法,让开发人员很方便的看出来子系统可供调用的功能。
  2. 实现了子系统与调用端的松耦合关系。
  3. 扩展性很强,子类系统不受限制。

缺点:

隔绝了子系统的具体实现代码,增加代码溯源的难度。

代码:

//注:这里的门面写法和Laravel中的不一样,Laravel的门面是基于门面模式提供了一套强大且优雅的模块子系统解决方案,而此处的门面只是一种实现门面思想的示例。
class Facade {
    private $pc;
    private $mobile;
    public function __construct(Mobile $mobile, PC $pc) {
        $this->mobile = $mobile;
        $this->pc     = $pc;
    }

    public function turnOn() {
        $this->mobile->turnOn();
        $this->pc->turnOn();
    }


    public function turnOff() {
        $this->pc->turnOff();
        $this->mobile->turnOff();
    }
}


//子系统接口
interface PC {
    public function turnOn();
    public function turnOff();
}


//子系统接口
interface  Mobile {
    public function turnOn();
    public function turnOff();
}


//子系统实现
class ASUS implements PC {
    public function turnOn() {
        echo '华硕电脑开机' . PHP_EOL;
    }

    public function turnOff() {
        echo '华硕电脑关机' . PHP_EOL;
    }
}


//子系统实现
class Vivo implements Mobile {
    public function turnOn() {
        echo 'Vivo手机开机' . PHP_EOL;
    }

    public function turnOff() {
        echo 'Vivo手机关机' . PHP_EOL;
    }
}


//调用端==========================================
$facade = new Facade(new Vivo(), new ASUS());
$facade->turnOn();
$facade->turnOff();

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

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

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

相关文章

  • php中的一个中文字符串截取函数

    下面是PHP中一个中文字符串截取函数的完整攻略。 函数介绍 PHP中有一个内置的中文字符串截取函数,名为mb_substr。它可以截取任意长度的字符串,包括中文字符。本函数与substr的不同点在于支持多字节字符。 函数参数 mb_substr函数的参数包括输入字符串、截取起始位置和截取长度。具体如下: // mb_substr function signa…

    PHP 2023年5月26日
    00
  • PHP实现文件上传下载实例

    关于“PHP实现文件上传下载实例”的完整攻略,我将从以下几个方面进行讲解: 文件上传 文件下载 完整示例 1. 文件上传 文件上传功能是网站中常见的功能之一。借助PHP的$_FILES全局变量,可以轻松实现文件上传功能。以下是代码实现示例: <?php if(isset($_FILES[‘file’])) { $file = $_FILES[‘file…

    PHP 2023年5月26日
    00
  • php下获取http状态的实现代码

    获取HTTP状态的实现代码可以使用PHP内置的cURL函数来完成。以下是获取HTTP状态的完整攻略: 步骤一:创建cURL句柄 首先,我们需要创建一个cURL句柄。可以使用curl_init()函数来创建一个新的cURL句柄。代码示例如下: $ch = curl_init(); 步骤二:设置cURL句柄选项 接下来,我们需要设置cURL句柄的选项,包括URL…

    PHP 2023年5月23日
    00
  • PHP大神的十大优良习惯

    下面给您详细讲解“PHP大神的十大优良习惯”的完整攻略。 1. 利用Git进行代码管理 Git是现代化的代码管理工具,是开发者的必备技能之一。利用Git进行代码管理能够使得代码更加规范、便于合作开发、版本控制等。除了常规的Git操作,例如git init、git add、git commit、git push等,还应该了解一些高级的Git操作。例如,git …

    PHP 2023年5月23日
    00
  • JS回调函数原理与用法详解【附PHP回调函数】

    JS回调函数原理与用法详解【附PHP回调函数】 什么是回调函数? 回调函数是指在一个函数中调用另一个函数时,将这个函数作为参数传递给被调用的函数,并在被调用的函数执行完毕后再执行这个作为参数传递进去的函数。最常见的情况是异步编程中,用于处理异步请求的回调函数。 JS中的回调函数 在JavaScript中,可以通过定义函数的方式来实现回调函数的功能。例如: f…

    PHP 2023年5月27日
    00
  • ThinkPHP模板判断输出Empty标签用法详解

    什么是Empty标签? Empty标签是ThinkPHP中常用的一种模板标签,用于判断某个变量是否为空,并可以根据判断结果确定输出不同的内容。Empty标签的使用可以让我们的模板代码更加简洁、高效。 Empty标签的语法 Empty标签的语法如下: <empty name="变量名"> 变量为空时输出的内容 </empt…

    PHP 2023年5月26日
    00
  • PHP pthreads v3下同步处理synchronized用法示例

    关于“PHP pthreads v3下同步处理synchronized用法示例”的攻略,我来说明一下。 1. 什么是PHP pthreads? PHP pthreads 是 PHP 的多线程扩展库,它使用的是基于 POSIX 线程的标准模型实现的多线程,提供了一些类和方法以便进行并发编程。PHP pthreads 的主要特点是可以实现多线程并发处理,简化程序…

    PHP 2023年5月27日
    00
  • PHP下载文件函数与用法示例

    当我们在使用PHP进行文件下载操作时,可以使用download_file()函数来实现。该函数可以将指定的文件下载到客户端本地。下面是该函数的用法示例: download_file()函数 <?php function download_file($path) { if (file_exists($path)) { header(‘Content-De…

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