1. 概念

    门面模式(facade)又称外观模式,用于为子系统中的一组接口提供一个一致的界面。门面模式定义了一个高层接口,这个接口使得子系统更加容易使用;引入门面角色之后,用户只需要直接与门面角色交互,用户与子系统之间的复杂关系由门面角色来实现,从而降低了系统的耦合度。

  2. 作用

    • 为一些复杂的子系统提供一组接口。
    • 提高子系统的独立性
    • 在层次化结构中,可以使用门面模式定义系统的每一层的接口
  3. 优点

  • 它对于客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
  • 实现了子系统与客户之间的松耦合关系。
  • 如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择。
<?php
class Camera
{
    public function turnOn()
    {
        echo 'turn on camera';
    }

    public function turnOff()
    {
        echo 'turn off camera';
    }
}

class Light
{
    public function turnOn()
    {
        echo 'turn on light';
    }

    public function turnOff()
    {
        echo 'turn off light';
    }
}

//门面类
class Facade
{
    private $camera;
    private $light;

    public function __construct()
    {
        $this->camera = new Camera();
        $this->light = new Light();
    }

    //启动接口
    public function activate()
    {
        $this->camera->turnOn();
        $this->light->turnOn();
    }

    //关闭接口
    public function deactivate()
    {
        $this->camera->turnOff();
        $this->light->turnOff();
    }
}
//客户端
class Client
{
    private static $securit;
    public static function main()
    {
        self::$securit = new Facade();
        self::$securit->activate();
        self::$securit->deactivate();
    }
}

Client::main();