门面设计模式php,学习php设计模式 php实现门面模式(Facade)

这篇文章主要介绍了php设计模式中的门面模式,使用php实现门面模式,感兴趣的小伙伴们可以参考一下

一、意图

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统更加容易使用【GOF95】

外部与子系统的通信是通过一个门面(Facade)对象进行。

二、门面模式结构图

ea1040da14a5792c0522bf66a3e49d5b.png

三、门面模式中主要角色

门面(Facade)角色:

此角色将被客户端调用

知道哪些子系统负责处理请求

将用户的请求指派给适当的子系统

子系统(subsystem)角色:

实现子系统的功能

处理由Facade对象指派的任务

没有Facade的相关信息,可以被客户端直接调用

可以同时有一个或多个子系统,每个子系统都不是一个单独的类,而一个类的集合。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并知道门面模式的存在,对于子系统而言,门面仅仅是另一个客户端。

四、门面模式的优点1、它对客户屏蔽了子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便

2、实现了子系统与客户之间的松耦合关系

3、如果应用需要,它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择

五、门面模式适用场景1、为一些复杂的子系统提供一组接口

2、提高子系统的独立性

3、在层次化结构中,可以使用门面模式定义系统的每一层的接口

六、门面模式与其它模式抽象工厂模式(abstract factory模式):Abstract Factory模式可以与Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建子系统对象。Abstract Factory模式也可以代替Facade模式隐藏那些与平台相关的类

调停者模式:Mediator模式与Facade模式的相似之处是,它抽象了一些已有类的功能。然而,Mediator目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他同类对象通信。相对而言,Facade模式仅对子系统对象的接口进行抽象,从而使它们更容易使用;它并定义不功能,子系统也不知道facade的存在

单例模式(singleton模式):一般来说,仅需要一个Facade对象,因此Facade对象通常属于Singleton对象。

七、门面模式PHP示例

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();

?>

以上就是使用php实现门面模式的代码,还有一些关于门面模式的概念区分,希望对大家的学习有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值