代码改变世界

深入 Laravel 内核之外观模式(门面模式)

2020-06-22 11:55  小伍2013  阅读(411)  评论(0编辑  收藏  举报

门面模式核心内容:

  • 客户端与子系统的通信通过外观对象进行;
  • 外观对象封装一系列子系统的具体对应方法,对客户端只需暴露一个单一的入口方法;
  • 客户端通过访问外观对象即可调用子系统的基础方法,无需关心子系统的具体实现;
  • 可以通过引入抽象外观类解决增减子系统需要修改外观类的问题;
  • 可以通过引入外部配置文件实现外观对象与不同子系统的绑定关系;
  • 外观模式可以有效降低客户端与子系统的耦合度,客户端只与外观对象交互,不关心子系统的复杂细节;
  • 一个系统通常只需要一个外观类,一般情况下外观类为单例模式;

先定义两个子系统,子系统有各自的操作方法:

class SystemA
{
    public function operationA()
    {
        //
    }
}

class SystemB
{
    public function operationB()
    {
        //
    }
}

定义一个外观类,提供单一入口,内部负责调用子系统的方法:

class Facade
{
    private $systemA;
    private $systemB;

    public function __construct()
    {
        $this->systemA = new SystemA;
        $this->systemB = new SystemB;
    }

    public function operation()
    {
        $this->systemA->operationA();
        $this->systemB->operationB();
    }
}

定义客户端,客户端只需要与外观类交互即可实现对子系统的调用:

class Client
{
    public function main()
    {
        (new Facade)->operation();
    }
}