浅谈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中文路径问题详解

    1. 问题 低版本的PHP可能会遇到不支持中文路径的情况:  (1) require(‘http://localhost/中文路径/test.php’);  (2) require(‘\中文路径\test.php’);  (3) $file = fopen(‘http://localhost/中文路径/test.php’);  (4) $file = fop…

    PHP 2023年4月18日
    00
  • 深入php多态的实现详解

    那么我来详细讲解“深入PHP多态的实现详解”的完整攻略。 什么是多态 多态是面向对象编程的三大特性之一,指的是同一操作作用在不同的对象上面时,会产生不同的行为。通过多态,我们可以写出通用的代码,使得同一个函数或方法能够处理不同种类的对象,从而提高代码的复用性和灵活性。 PHP中的多态实现 在PHP中,多态可以通过继承和接口来实现。下面我们分别来看一下。 继承…

    PHP 2023年5月27日
    00
  • PHP如何实现跨域

    实现跨域请求一般可以使用以下三种方法: 修改目标服务器响应头信息 使用代理服务器转发请求 JSONP跨域请求 下面我会详细讲解每种方法的实现以及示例说明。 方法一:修改目标服务器响应头信息 当浏览器端发起获取其他域下的数据时,浏览器会限制跨域请求,此时可以通过修改目标服务器响应头信息来实现跨域。通常使用Access-Control-Allow-Origin来…

    PHP 2023年5月27日
    00
  • PHP获取时间戳、获取天周月的起始时间、指定时间所在周、指定时间的各个周等相关函数

    一、时间戳和日期互相转换 // 获取时间戳 $date = time(); // 获取当前时间戳 $date = mktime(0, 0, 0, 10, 10, 2020); // 获取指定时间的时间戳 2020年10月10日0时0分0秒 // 日期转换为时间戳 $date = “2019-08-08 08:08:08”; $timestamp = strt…

    PHP 2023年5月4日
    00
  • php中3种方法删除字符串中间的空格

    解决php中删除字符串中间空格的问题,主要有以下3种方法。 方法一:使用str_replace函数 str_replace函数可以替换指定字符串中的某个字符。我们可以使用该函数来替换字符串中的空格,从而实现删除字符串中的空格。 <?php $string = "this is a string"; $string_without_s…

    PHP 2023年5月26日
    00
  • PHP 八种基本的数据类型小结

    PHP 八种基本的数据类型小结 PHP 有八种基本的数据类型,分别是整数(integer)、浮点数(float)、布尔型(boolean)、字符串(string)、数组(array)、对象(object)、 NULL 和资源(resource)。下面我们分别来讲解这些数据类型。 整数(integer) 整数就是不带小数部分的数字。可以使用十进制、二进制、八进…

    PHP 2023年5月23日
    00
  • php实现的用户查询类实例

    下面我将详细讲解“PHP实现的用户查询类实例”的攻略。 一、什么是用户查询类? 用户查询类是一个封装了与用户有关的数据库操作的类。它的作用是封装复杂的数据库操作,提供简洁的接口,方便用户进行基本的查询、修改等操作。 二、如何实现用户查询类? 1. 创建一个用户查询类 为了创建一个用户查询类,我们首先需要定义一个类。类的命名应该具有描述性,例如“UserQue…

    PHP 2023年5月27日
    00
  • php 解压rar文件及zip文件的方法

    介绍”PHP 解压RAR文件及ZIP文件的方法”的完整攻略如下: 确定压缩文件路径 首先,你需要确定要解压缩的压缩文件的路径。例如,假设你的压缩文件路径是 /path/to/file.rar 和 /path/to/file.zip。 安装PHP rar扩展 为了解压RAR文件,你需要安装PHP rar扩展。如果你使用的是Ubuntu或Debian,可以通过以…

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