加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP设计模式—外观模式

发布时间:2020-12-13 21:24:21 所属栏目:PHP教程 来源:网络整理
导读:? 定义: 外观模式(Facade): 又叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 ? 代码实例: 假设实现一个功能需要用到子系统中的四个方法。 /* * * Class SubSystemOne */ class

?

定义:

外观模式(Facade):又叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

?

代码实例:

假设实现一个功能需要用到子系统中的四个方法。

/**
 * Class SubSystemOne
 */
class SubSystemOne
{
    public function methodOne()
    {
        return '子系统方法一' . '<br>';
    }
}

*
 * Class SubSystemTwo
  SubSystemTwo
{
     methodTwo()
    {
        return '子系统方法二' . '<br>'*
 * Class SubSystemThree
  SubSystemThree
{
     methodThree()
    {
        return '子系统方法三' . '<br>'*
 * Class SubSystemFour
  SubSystemFour
{
     methodFour()
    {
        return '子系统方法四' . '<br>';
    }
}

如果不使用外观模式,客户端代码应该为:

$subSystemOne = new SubSystemOne();
$subSystemTwo =  SubSystemTwo();
$subSystemThree =  SubSystemThree();
$subSystemFour =  SubSystemFour();

echo $subSystemOne->methodOne();
$subSystemTwo->methodTwo();
$subSystemThree->methodThree();
$subSystemFour->methodFour();

这样的写法需要客户端了解子系统的具体实现方法,且代码没有解耦,如果子系统发生变化,则所有的客户端调用都需要进行相应的变化。

?

以下使用外观模式:
新增外观类Facade.php

*
 * 外观类,整合需要调用的子系统代码,给客户端调用,如果子系统发生变化,只用修改外观类代码
 * Class Facade
  Facade
{
    *
     * @var
     */
    private $subSystemOne;

    $subSystemTwo$subSystemThree$subSystemFour*
     * Facade constructor.
      __construct()
    {
        $this->subSystemOne =  SubSystemOne();
        $this->subSystemTwo =  SubSystemTwo();
        $this->subSystemThree =  SubSystemThree();
        $this->subSystemFour =  SubSystemFour();
    }


    *
     * 整合方法
      method()
    {
        $this->subSystemOne->methodOne();
        $this->subSystemTwo->methodTwo();
        $this->subSystemThree->methodThree();
        $this->subSystemFour->methodFour();
    }
}

客户端调用:

$facade =  Facade();
// 客户端可以不用知道子系统的存在,调用外观类中提供的方法就可以
$facade->method();

结果:

子系统方法一
子系统方法二
子系统方法三
子系统方法四

?

总结:

  • 外观模式能够为复杂系统提供简单且清晰的接口。
  • 外观模式只为系统中的某一层或子系统提供单一入口,能够帮助我们解耦项目中的不同部分,客户端只需调用一些简单方法,而不需要了解子系统的内部函数。
  • 当子系统发生变化时,只会对一个地方产生影响。
  • 如果希望客户端代码能简单地调用子系统或系统地改动不会影响客户端代码,那么就可以使用外观模式。

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读