中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在php項目中實現一個門面模式

發布時間:2021-01-29 16:28:31 來源:億速云 閱讀:169 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在php項目中實現一個門面模式,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、意圖
為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層次的接口,使得子系統更加容易使用【GOF95】
外部與子系統的通信是通過一個門面(Facade)對象進行。
二、門面模式結構圖

怎么在php項目中實現一個門面模式

三、門面模式中主要角色
門面(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示例

<?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項目中實現一個門面模式,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

怀宁县| 庆城县| 右玉县| 襄城县| 邯郸市| 台中市| 博客| 云龙县| 嘉鱼县| 建阳市| 两当县| 自治县| 曲松县| 嘉荫县| 德江县| 东丽区| 宜良县| 黑山县| 万安县| 昌图县| 武义县| 渑池县| 揭阳市| 大足县| 望谟县| 江津市| 黔西县| 保靖县| 洪湖市| 铜鼓县| 金山区| 乾安县| 天津市| 洱源县| 壤塘县| 石首市| 乌海市| 昌都县| 文安县| 南宁市| 南宫市|