程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP設計模式——門面模式

PHP設計模式——門面模式

編輯:關於PHP編程

PHP設計模式——門面模式


聲明:本系列博客參考資料《大話設計模式》,作者程傑。

 

門面模式(有時候也稱外觀模式)是指提供一個統一的接口去訪問多個子系統的多個不同的接口,它為子系統中的一組接口提供一個統一的高層接口。使用子系統更容易使用。

 

案例:炒股票,新股民不了解證券知識做股票,是很容易虧錢的,需要學習的知識太多了,這樣新手最好把炒股的事情委托給基金公司,基金公司了解證券知識,那麼新股民把自己的股票托管給基金公司去運營,這樣新股民不必了解哪只股票的走勢就可以完成股票的買賣。基金公司在這裡就是一個門面,針對於新股民的門面。

 

UML類圖:

\

角色分析:

門面(FacadeCompany)角色:此角色封裝一個高層接口,將客戶端的請求代理給適當的子系統對象,是門面模式的核心接口。

子系統(ICBC)角色:實現子系統的具體功能,處理FacadeCompany對象指派的任務。子系統沒有FacadeCompany的任何信息,沒有對FacadeCompany對象的引用。

 

具體代碼案例:

 

;
    }

    function sell()
    {
        echo 賣出阿裡股票
;
    }
}

/**萬達股票
 * Class Wanda
 */
class Wanda
{
    function buy()
    {
        echo 買入萬達股票
;
    }

    function sell()
    {
        echo 賣出萬達股票
;
    }
}

/**京東股票
 * Class Jingdong
 */
class Jingdong
{
    function buy()
    {
        echo 買入京東股票
;
    }

    function sell()
    {
        echo 賣出京東股票
;
    }
}

/**門面模式核心角色
 * Class FacadeCompany
 */
class FacadeCompany
{
    private $ali;

    private $wanda;

    private $jingdong;

    function __construct()
    {
        $this->ali=new Ali();
        $this->jingdong=new Jingdong();
        $this->wanda=new Wanda();
    }

    function buy()
    {
        $this->wanda->buy();
        $this->ali->buy();
    }

    function sell()
    {
        $this->jingdong->sell();
    }
}

客戶端調用代碼:

 

 

header(Content-Type:text/html;charset=utf-8);
//------------------------門面模式測試代碼------------------
require_once ./Facade/Facade.php;

$lurenA=new FacadeCompany();
$lurenA->buy();
$lurenA->sell();

優勢:

 

1)它可以對客戶屏蔽子系統組件,因而減少了客戶處理的對象的數目並使得子系統使用起來更加方便。

 

2) 它實現了子系統與客戶之間的松耦合關系,而子系統內部的功能組件往往是緊耦合的。松耦合關系使得子系統的組件變化不會影響到它的客戶。 Facade模式有助於建立層次結構系統,也有助於對對象之間的依賴關系分層。

3) Facade模式可以消除復雜的循環依賴關系。這一點在客戶程序與子系統是分別實現的時候尤為重要。在大型軟件系統中降低編譯依賴性至關重要。在子系統類改變時,希望盡量減少重編譯工作以節省時間。用Facade可以降低編譯依賴性,限制重要系統中較小的變化所需的重編譯工作。

4)Facade模式同樣也有利於簡化系統在不同平台之間的移植過程,因為編譯一個子系統一般不需要編譯所有其他的子系統。

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved