PHP设计模式—外观模式

定义:

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

代码实例:

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

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

/**
 * Class SubSystemTwo
 */
class SubSystemTwo
{
    public function methodTwo()
    {
        return '子系统方法二' . '<br>';
    }
}

/**
 * Class SubSystemThree
 */
class SubSystemThree
{
    public function methodThree()
    {
        return '子系统方法三' . '<br>';
    }
}

/**
 * Class SubSystemFour
 */
class SubSystemFour
{
    public function methodFour()
    {
        return '子系统方法四' . '<br>';
    }
}

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

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

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

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

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

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

    /**
     * @var
     */
    private $subSystemTwo;

    /**
     * @var
     */
    private $subSystemThree;

    /**
     * @var
     */
    private $subSystemFour;

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

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

客户端调用:

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

结果:

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

总结:

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

相关推荐

  • 设计模式:外观模式

    外观模式(Facade) 介绍:为子系统中的一组接口提供一个统一的入口.外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程 ...

  • 设计模式之☞外观模式

    简介 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易 ...

  • Facade外观模式

    >>返回<C#常用设计模式> 1. 简介 2. 示例 1. 简介 概述 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 比 ...

  • 设计模式-外观模式

    定义 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 为了方便理解,我们可以看看下图,左边是未使用外观模式时,外部客户端直接调用企业中的各个子 ...

  • 结合Mybatis源码看设计模式——外观模式

    定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 子系统复杂,增加外观模式提供简单调用接口 构建多层系统结构,用外观对象作为每层入口 详解 外观模式,主要理解外观.通俗一点可以认为这个模 ...

  • 详解JAVA面向对象的设计模式 (四)、外观模式

    外观模式 Facade 外观模式内容相对简单,就不写新的例子了.本篇文章摘录自 http://c.biancheng.net/view/1369.html 外观模式的定义与特点 外观(Facade)模 ...

  • 无废话设计模式(10)结构型模式--外观模式

    0-前言 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定了一个高层接口    这一接口使得这一子系统更加容易使用: 1-实现 1-1.简单UML图: 1-2.代码实现 //1.子系统A ...

  • 深入浅出《设计模式》之外观模式(C++)

    前言 模式介绍 外观模式相比较之下比较简单,模式设计中定义是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的这一子系统更加容易使用. 如果不理解呢,简单些说就是外观模式提 ...

  • 设计模式之外观模式

    设计模式之外观模式

  • 设计模式-门面模式

    门面模式 参考资料 图解设计模式 大话设计模式 设计模式之禅 github我见过最好的设计模式 http://c.biancheng.net/view/1326.html 定义 也称为外观模式 外观模 ...