在軟體系統中,客戶端程式經常會與複雜系統的內部子系統之間產生耦合,從而導致客戶端程式隨子系統的變化而變化,那麼如何簡化客戶端程式跟內部子系統之間的依賴?此時,我們需要引入乙個「外觀」角色,客戶端直接與外觀角色進行互動,客戶端與子系統之間的依賴關係由外觀角色(facade)來實現和維護。如下圖:
外部程式與子系統之間的通訊通過乙個統一的外觀物件進行,外觀模式定義了乙個高層的介面,為子系統中的一組介面提供乙個一致的介面,使得子系統更加容易使用。外觀模式也叫做門面模式。
外觀模式主要由以下兩部分組成:
外觀角色:如facade
子系統:如subsystema
假設現在有這樣乙個場景,乙個客戶去銀行辦理一張信用卡,假定銀行工作人員需要進行三步操作,涉及到三個子系統。第一步:首先進行聯網核查,看公安局系統裡面是否存在這個人;第二步:通過個人信用系統檢視此人是否有不良信用記錄;第三步:進入銀行系統,為此人辦理信用卡。**如下:
公安系統
public
class usersystem
}
個人信用系統
public
class creditsystem
}
銀行系統
public
class banksystem
}
首先,我們先看不使用外觀模式時,客戶端如何實現:
public
class client else
if(cs.checkcredit(userid)==false)
if(b)}}
可以看到,此時客戶端程式與三個子系統都發生了耦合,當子系統發生變化時,客戶端程式也可能會面臨著修改。如果子系統繁多且關係複雜時,客戶端程式是很難進行維護的。乙個比較好的設計是為這些子系統提供乙個統一的介面,這個介面專門負責維護客戶端與子系統之間以及各個子系統之間的依賴關係,客戶端只需要跟這個統一的介面打交道即可。下面我們引入「外觀」角色,使用外觀模式來處理。
首先加入乙個外觀物件facade
public
class
facade else
if(cs.checkcredit(userid)==false)
if(b)
return b;}}
修改客戶端,使用外觀角色
public
class facadeclient
}
可以看到,使用外觀模式之後,客戶端程式只與外觀角色facade發生耦合,遮蔽了與子系統之間的複雜關係,降低了客戶端與子系統之間的耦合度。
當我們的系統中存在多個子系統,客戶端與子系統之間依賴性較大時,外觀模式可以很好的降低耦合度。主要手段是通過引入乙個外觀角色(facade),把客戶端與子系統之間的依賴關係封裝到這個外觀物件中,客戶端直接與外觀物件進行互動。
十二 設計模式之外觀模式(結構型)
外觀模式概述 facade模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。外觀模式的角色和職責 facade 為呼叫方定義簡單的呼叫介面。clients 呼叫者...
結構型模式之外觀模式
外觀模式 facade 外觀模式是為了解決類與類之家的依賴關係的,像spring 一樣,可以將類和類之間的關係配置到配置 檔案中,而外觀模式就是將他們的關係放在乙個facade 類中,降低了類類之間的耦合度,該模式中沒 有涉及到介面,看下類圖 我們以乙個計算機的啟動過程為例 我們先看下實現類 pub...
結構型模式之外觀模式
1 外觀模式產生的原因 在軟體開發過程中,程式一般會越做越大,而這樣系統中類及子系統之間的影響會使彼此間的關係變得錯綜複雜即過多的耦合,這就導致了隨著系統中類或子系統發生變化,與之相關聯的子系統或類就需要發生變化。2 外觀模式的定義 外觀模式 facade pattern 就是為子系統中的一組介面提...