php设计模式之门面模式(Facade)
发表于:2019-08-16 10:29:30浏览:56次
又称外观模式,用于为子系统中的一组接口提供一个一致的界面。门面模式定义了一个高层接口,这个接口使得子系统更加容易使用:引入门面角色之后,用户只需要直接与门面角色交互,用户与子系统之间的复杂关系由门面角色来实现,从而降低了系统的耦。
```php
开启"); }
// 关闭
public function turnOff() { var_dump("照相机 > 关闭"); }
// 旋转
public function rotate($degrees) { var_dump("照相机 > 旋转"); }
}
// 灯光
class Light {
// 开启
public function turnOn() { var_dump("灯光 > 开启"); }
// 关闭
public function turnOff() { var_dump("灯光 > 关闭"); }
// 换灯泡
public function chageBulb() { var_dump("灯光 > 换灯泡"); }
}
// 传感器
class Sensor {
// 激活
public function activate() { var_dump("传感器 > 激活"); }
// 关闭
public function deactivate() { var_dump("传感器 > 关闭"); }
// 触发
public function trigger() { var_dump("传感器 > 触发"); }
}
// 铃声
class Alarm {
// 激活
public function activate() { var_dump("铃声 > 激活"); }
// 关闭
public function deactivate() { var_dump("铃声 > 关闭"); }
// 响
public function ring() { var_dump("铃声 > 响"); }
// 停止响
public function stopRing() { var_dump("铃声 > 停止响"); }
}
// 安全门面
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();
}
}
// client
$security = new SecurityFacade();
$security->activate();
?>
```
输出
```bash
vagrant@vagrant-ubuntu:~$ sudo php facade.php
string(18) "照相机 > 开启"
string(18) "照相机 > 开启"
string(15) "灯光 > 开启"
string(15) "灯光 > 开启"
string(15) "灯光 > 开启"
string(18) "传感器 > 激活"
string(15) "铃声 > 激活"
```

