什麼是外觀模式?
透過在必須的邏輯和方法的集合前創建的外觀接口,外觀設計模式隱藏了來自調用對象的複雜性。
為何使用外觀設計模式:
使用基於外觀設計模式的物件的原因是介面第三方解決方案。需要記住的是,我們不斷強調物件導向的項目應當知識關聯對象的一個集合。鑑於這種體系結構,首席程式設計人員可能覺得使用第三方物件更為明智。
假設要為某個應用程式提供搜尋Web頁面。該頁面首先自己尋找符合搜尋項目的所有資料。如果結果數小於10,那麼就會呼叫第三方服務檢索其他結果,這些結果會被加到應用程式在內部發現的結果末端。 Search外觀物件將結果傳回至呼叫視圖物件。在內部,Search外觀物件會呼叫查詢內部資料庫的方法。隨後,它會判斷是否需要透過Web服務來呼叫Google。如果需要,那麼也會分析所有結果,以便傳回一個同類結果集。
為了隱藏複雜的、執行業務流程某個步驟所需的方法和邏輯群組,就應使用基於外觀設計模式的類別。
UML
此UML圖詳細說明了一個使用外觀設計模式的類別設計。
以下是上圖的說明:
1.MyObject類別包含一個名為doSomethingRequiresAandB()的公共方法,這個方法只是MyObject類別執行中的一個步驟。 doSomethingRequiresAandB()方法建立物件LogicFacade的一個新實例,該實例呼叫對於MyObject來說足夠抽象的、名稱為callRequiredLogic()的公共方法。
2.LogicFacade類別內部的callRequiredLogic()方法隨後負責建立LogicObjectA的一個實例以及呼叫doSomethingA()方法,此外還負責建立LogicObjectB的一個實例以及呼叫doSomethingB()方法。
3.上述所有動作都透過LogicFacade類別向回傳遞,從而使他們能夠被MyObject使用。
使用實例程式碼展示:
header("Content-type:text/html;Charset=utf-8"); //子系统角色 class SubSystemOne{ function mothedOne(){ echo "方法一<br>"; } } class SubSystemTwo{ function mothedTwo(){ echo "方法二<br>"; } } class SubSystemThree{ function mothedThree(){ echo "方法三<br>"; } } //外观角色 class Facade{ private $subSystemOne = null; private $subSystemTwo = null; private $subSystemThree =null; function __construct(){ $this->subSystemOne =new SubSystemOne(); $this->subSystemTwo =new SubSystemTwo(); $this->subSystemThree =new SubSystemThree(); } function mothedA(){ $this->subSystemOne->mothedOne(); } function mothedB(){ $this->subSystemTwo->mothedTwo(); } function mothedC(){ $this->subSystemThree->mothedThree(); } function mothedD(){ $this->subSystemOne->mothedOne(); $this->subSystemTwo->mothedTwo(); $this->subSystemThree->mothedThree(); } } //测试 $facade = new Facade(); $facade->mothedA(); $facade->mothedB(); $facade->mothedC(); $facade->mothedD();
以上是PHP物件導向進階設計模式:外觀模式使用實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!