phpFacade门脸(外观)方式

原创
小哥 3年前 (2022-11-17) 阅读数 75 #大杂烩

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用
外部与子系统的通信是通过一个门面(Facade)对象进行。

门面(Facade)角色:
此角色将被客户端调用
知道哪些子系统负责处理请求
将用户的请求指派给适当的子系统

子系统(subsystem)角色:
实现子系统的功能
处理由Facade对象指派的任务
没有Facade的相关信息,可以被客户端直接调用
可以同时有一个或多个子系统,每个子系统都不是一个单独的类,而一个类的集合。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并知道门面模式的存在,对于子系统而言,门面仅仅是另一个客户端。

门面模式的优点
1、它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便
2、实现了子系统与客户之间的松耦合关系
3、如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择
门面模式适用场景
1、为一些复杂的子系统提供一组接口
2、提高子系统的独立性
3、在层次化结构中,可以使用门面模式定义系统的每一层的接口

class Camera
{

/**

  • 打开录像机
    */
    public function turnOn()
    {
    echo Turning on the camera.
    ;
    }

/**

  • 关闭录像机
    */
    public function turnOff()
    {
    echo Turning off the camera.
    ;
    }

/**

  • 转到录像机
  • @param $degrees
    */
    public function rotate($degrees)
    {
    echo rotating the camera by , $degrees, degrees.
    ;
    }
    }

class Light
{

/**

  • 开灯
    */
    public function turnOn()
    {
    echo Turning on the light.
    ;
    }

/**

  • 关灯
    */
    public function turnOff()
    {
    echo Turning off the light.
    ;
    }

/**

  • 换灯泡
    */
    public function changeBulb()
    {
    echo changing the light-bulb.
    ;
    }
    }

class Sensor
{

/**

  • 启动感应器
    */
    public function activate()
    {
    echo Activating the sensor.
    ;
    }

/**

  • 关闭感应器
    */
    public function deactivate()
    {
    echo Deactivating the sensor.
    ;
    }

/**

  • 触发感应器
    */
    public function trigger()
    {
    echo The sensor has been trigged.
    ;
    }
    }

class Alarm
{

/**

  • 启动警报器
    */
    public function activate()
    {
    echo Activating the alarm.
    ;
    }

/**

  • 关闭警报器
    */
    public function deactivate()
    {
    echo Deactivating the alarm.
    ;
    }

/**

  • 拉响警报器
    */
    public function ring()
    {
    echo Ring the alarm.
    ;
    }

/**

  • 停掉警报器
    */
    public function stopRing()
    {
    echo Stop the alarm.
    ;
    }
    }

/**

  • 门面类
    */
    class SecurityFacade
    {

/ 录像机 /
private $_camera1, $_camera2;

//
private $_light1, $_light2, $_light3;

/ 感应器 /
private $_sensor;

/ 警报器 /
private $_alarm;

public function __construct()
{
$this->_camera1 = new Camera();
$this->_camera2 = new Camera();

$this->_light1 = new Light();
$this->_light2 = new Light();
$this->_light3 = new Light();

$this->_sensor = new Sensor();
$this->_alarm = new Alarm();
}

public function activate()
{
$this->_camera1->turnOn();
$this->_camera2->turnOn();

$this->_light1->turnOn();
$this->_light2->turnOn();
$this->_light3->turnOn();

$this->_sensor->activate();
$this->_alarm->activate();
}

public function deactivate()
{
$this->_camera1->turnOff();
$this->_camera2->turnOff();

$this->_light1->turnOff();
$this->_light2->turnOff();
$this->_light3->turnOff();

$this->_sensor->deactivate();
$this->_alarm->deactivate();
}
}

/**

  • 客户端
    */
    class Client
    {

private static $_security;

/**

  • Main program.
    */
    public static function main()
    {
    self::$_security = new SecurityFacade();
    self::$_security->activate();
    }
    }

Client::main();

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门