為子系統中的一組介面提供一個一致的介面,定義一個高層介面,使得這一子系統更加的容易使用
模式定義:面板模式(Facade Pattern):外部與一個子系統的通訊必須通過一個統一的外觀對象進行,為子系統中的一組介面提供一個一致的介面,面板模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。面板模式又稱為門面模式,它是一種對象結構型模式。
模式結構:
面板模式的就是讓client用戶端以一種簡單的方式來調用比較複雜的系統,來完成一件事情。
面板模式,也叫門面模式。它多用於在多個子系統之間,作為中介層。使用者通過Facade對象,直接請求工作,省去了使用者調用多個子系統的複雜動作。
面板模式常舉的一個例子,就是我們買了好多支股票,但是時間有限。盯盤很複雜,我們搞得一團糟。所以,我們乾脆買了股票基金。股票基金就好比於面板模式的Facade對象,而子系統就是股票基金投的各支股票。
代碼如下:
class car { public function start() { print_r("車子啟動"); } public function check_stop() { print_r("刹車檢查正常"); } public function check_box() { print_r("檢查油箱正常"); } public function check_console() { print_r("檢查儀錶盤是否異常"); } } //facade模式 class carfacade { public function catgo(car $carref){ $carref->check_stop(); $carref->check_box(); $carref->check_console(); $carref->start(); } } //用戶端可以簡單的去調用。 $car = new car(); $carObj = new carfacade(); $carObj->catgo($car);
代碼如下:
<?php /** * 面板模式 樣本 * * 為子系統中的一組介面提供一個一致的介面,定義一個高層介面,使得這一子系統更加的容易使用 */ class SubSytem1 { public function Method1() { echo "subsystem1 method1<br/>"; } } class SubSytem2 { public function Method2() { echo "subsystem2 method2<br/>"; } } class SubSytem3 { public function Method3() { echo "subsystem3 method3<br/>"; } } class Facade { private $_object1 = null; private $_object2 = null; private $_object3 = null; public function construct() { $this->_object1 = new SubSytem1(); $this->_object2 = new SubSytem2(); $this->_object3 = new SubSytem3(); } public function MethodA() { echo "Facade MethodA<br/>"; $this->_object1->Method1(); $this->_object2->Method2(); } public function MethodB() { echo "Facade MethodB<br/>"; $this->_object2->Method2(); $this->_object3->Method3(); } } // 執行個體化 $objFacade = new Facade(); $objFacade->MethodA(); $objFacade->MethodB();