PHP物件導向進階設計模式:外觀模式使用實例

巴扎黑
發布: 2023-03-07 20:22:01
原創
1828 人瀏覽過

什麼是外觀模式?

透過在必須的邏輯和方法的集合前創建的外觀接口,外觀設計模式隱藏了來自調用對象的複雜性。

為何使用外觀設計模式:

使用基於外觀設計模式的物件的原因是介面第三方解決方案。需要記住的是,我們不斷強調物件導向的項目應當知識關聯對象的一個集合。鑑於這種體系結構,首席程式設計人員可能覺得使用第三方物件更為明智。

假設要為某個應用程式提供搜尋Web頁面。該頁面首先自己尋找符合搜尋項目的所有資料。如果結果數小於10,那麼就會呼叫第三方服務檢索其他結果,這些結果會被加到應用程式在內部發現的結果末端。 Search外觀物件將結果傳回至呼叫視圖物件。在內部,Search外觀物件會呼叫查詢內部資料庫的方法。隨後,它會判斷是否需要透過Web服務來呼叫Google。如果需要,那麼也會分析所有結果,以便傳回一個同類結果集。

為了隱藏複雜的、執行業務流程某個步驟所需的方法和邏輯群組,就應使用基於外觀設計模式的類別。

UML

此UML圖詳細說明了一個使用外觀設計模式的類別設計。

PHP物件導向進階設計模式:外觀模式使用實例

以下是上圖的說明:

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!