外部与一个子系统的通信必须通过一个统一的门面对象进行。
- 门面模式提供一个高层次的接口,使得子系统更易于使用。
- 每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。
- 整个系统可以有多个门面类。
- 思考laravel中的门面模式是如何进行的;
直接在控制器中实例化下对象即可;
new FacadePractice();
class FacadePractice{
public function __construct(){
echo "门面模式:<br><br>";
$securityFacade = new SecurityFacade();
echo "执行所有操作:<br>";
$securityFacade->activate();
echo "<br>关闭所有操作,启动安全模式:<br>";
$securityFacade->deactivate();
}
}
// 相机类
class Camera{
public function turnOn(){
echo "打开照相机<br>";
}
public function turnOff(){
echo "关闭照相机<br>";
}
public function rotate(){
echo "切换照相机状态<br>";
}
}
// 灯类
class Light{
public function turnOn(){
echo "打开电灯<br>";
}
public function turnOff(){
echo "关闭电灯<br>";
}
public function changeBulb(){
echo "电灯的状态切换<br>";
}
}
// 元器件类
class Sensor{
public function activate(){
echo "使用电气器件<br>";
}
public function deactivate(){
echo "不使用电气器件<br>";
}
public function trigger(){
echo "电气器件的状态切换<br>";
}
}
// 安全门面类
class SecurityFacade{
private $_camera1,$_camera2;
private $_light1,$_light2,$_light3;
private $_sensor;
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();
}
public function activate() {
$this->_camera1->turnOn();
$this->_camera2->turnOn();
$this->_light1->turnOn();
$this->_light2->turnOn();
$this->_light3->turnOn();
$this->_sensor->activate();
}
public function deactivate() {
$this->_camera1->turnOff();
$this->_camera2->turnOff();
$this->_light1->turnOff();
$this->_light2->turnOff();
$this->_light3->turnOff();
$this->_sensor->deactivate();
}
}