《PHP編程:學習php設計模式 php實現門面模式(Facade)》要點:
本文介紹了PHP編程:學習php設計模式 php實現門面模式(Facade),希望對您有用。如果有疑問,可以聯系我們。
PHP應用一、意圖
為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層次的接口,使得子系統更加容易使用【GOF95】
外部與子系統的通信是通過一個門面(Facade)對象進行.
二、門面模式結構圖
PHP應用
PHP應用三、門面模式中主要角色
門面(Facade)角色:
此角色將被客戶端調用
知道哪些子系統負責處理哀求
將用戶的哀求指派給適當的子系統
PHP應用子系統(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示例
PHP應用
<?php
class Camera {
/**
* 打開錄像機
*/
public function turnOn() {
echo 'Turning on the camera.<br />';
}
/**
* 關閉錄像機
*/
public function turnOff() {
echo 'Turning off the camera.<br />';
}
/**
* 轉到錄像機
* @param <type> $degrees
*/
public function rotate($degrees) {
echo 'rotating the camera by ', $degrees, ' degrees.<br />';
}
}
class Light {
/**
* 開燈
*/
public function turnOn() {
echo 'Turning on the light.<br />';
}
/**
* 關燈
*/
public function turnOff() {
echo 'Turning off the light.<br />';
}
/**
* 換燈泡
*/
public function changeBulb() {
echo 'changing the light-bulb.<br />';
}
}
class Sensor {
/**
* 啟動感應器
*/
public function activate() {
echo 'Activating the sensor.<br />';
}
/**
* 關閉感應器
*/
public function deactivate() {
echo 'Deactivating the sensor.<br />';
}
/**
* 觸發感應器
*/
public function trigger() {
echo 'The sensor has been trigged.<br />';
}
}
class Alarm {
/**
* 啟動警報器
*/
public function activate() {
echo 'Activating the alarm.<br />';
}
/**
* 關閉警報器
*/
public function deactivate() {
echo 'Deactivating the alarm.<br />';
}
/**
* 拉響警報器
*/
public function ring() {
echo 'Ring the alarm.<br />';
}
/**
* 停掉警報器
*/
public function stopRing() {
echo 'Stop the alarm.<br />';
}
}
/**
* 門面類
*/
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應用以上就是使用php實現門面模式的代碼,還有一些關于門面模式的概念區分,希望對大家的學習有所贊助.
維易PHP培訓學院每天發布《PHP編程:學習php設計模式 php實現門面模式(Facade)》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。