✍ 其實外觀模式的動機可以用下面的圖進行展示:
轉換:
引入外觀角色之後,使用者只需要直接與外觀角色互動,使用者與子系統之間的複雜關係由外觀角色來實現
,從而降低了系統的耦合度。
外觀模式(facade pattern) :外部與乙個子系統的通訊必須通過乙個統一的外觀物件
進行,為子系統中的一組介面提供乙個一致的介面
,外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用
。外觀模式又稱為門面模式
,它是一種物件結構型模式
外觀模式包含如下角色:
✍ 下面演示一下:
積分兌換商品系統:
商品物件
public
class
pointsgift
public string getname()
public
void
setname
(string name)
}
檢驗資格(subsystem:子系統角色)
//校驗資格
public
class
qualifyservice
}
積分支付(subsystem:子系統角色)
//積分支付
public
class
pointspaymentservice
}
物流系統的對接邏輯(subsystem:子系統角色)
public
class
shippingservice
}
禮物兌換服務(外觀類)(facade: 外觀角色)
public
class
giftexchange
public
void
setqualifyservice
(qualifyservice qualifyservice)
public pointspaymentservice getpointspaymentservice()
public
void
setpointspaymentservice
(pointspaymentservice pointspaymentservice)
public shippingservice getshippingservice()
public
void
setshippingservice
(shippingservice shippingservice)
public
void
giftexchange
(pointsgift pointsgift)}}
}
類圖:
測試類
public
class
test
}
類圖:
需要變化一下,這裡不再手動注入修改
要求應用層不和子系統進行互動 只和外觀類互動
禮物兌換服務(外觀類)(facade: 外觀角色)
這樣子更加簡化了 再次強調,注意應用層不要和子系統互動只和外觀類互動外觀模式要求乙個子系統的外部與其內部的通訊通過乙個統一的外觀物件進行
,外觀類將客戶端與子系統的內部複雜性分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的很多物件打交道
。外觀模式的目的在於降低系統的複雜程度
。外觀模式從很大程度上提高了客戶端使用的便捷性
,使得客戶端無須關心子系統的工作細節,通過外觀角色即可呼叫相關功能。
✍ 說一下外觀模式的優缺點:
外觀模式的優點
外觀模式的缺點
✍ 在以下情況下可以使用外觀模式:
✍ 外觀模式的拓展:
乙個系統有多個外觀類:
在外觀模式中,通常只需要乙個外觀類,並且此外觀類只有乙個例項,換言之它是乙個單例類。在很多情況下為了節約系統資源,一般將外觀類設計為單例類。當然這並不意味著在整個系統裡只能有乙個外觀類,在乙個系統中可以設計多個外觀類,每個外觀類都負責和一些特定的子系統互動,向使用者提供相應的業務功能。
不要通過繼承乙個外觀類在子系統中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統提供乙個集中化和簡化的溝通渠道,而不是向子系統加入新的行為,新的行為的增加應該通過修改原有子系統類或增加新的子系統類來實現,不能通過外觀類來實現。
外觀模式與迪公尺特法則
外觀模式創造出乙個外觀物件,將客戶端所涉及的屬於乙個子系統的協作夥伴的數量減到最少,使得客戶端與子系統內部的物件的相互作用被外觀物件所取代。外觀類充當了客戶類與子系統類之間的「第三者」,降低了客戶類與子系統類之間的耦合度,外觀模式就是實現**重構以便達到「迪公尺特法則」要求的乙個強有力的**。
抽象外觀類的引入
外觀模式最大的缺點在於違背了「開閉原則」,當增加新的子系統或者移除子系統時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行程式設計。對於新的業務需求,不修改原有外觀類,而對應增加乙個新的具體外觀類,由新的具體外觀類來關聯新的子系統物件,同時通過修改配置檔案來達到不修改源**並更換外觀類的目的。
Java設計模式 外觀模式
外觀模式 facade 外觀模式的意圖是 為子系統提供乙個介面,便於它的使用。解釋 簡單的說,外觀模式就是封裝多個上層應用需要的方法,使得上層呼叫變得簡單,為上層提供簡單的介面,是設計模式中一種比較簡單的設計思想,但是,也是最常用的一種設計模式。舉例 當你想吃橘子的時候,你需要做那幾件事呢?1 去買...
Java設計模式 外觀模式
外觀模式 facade 是為了解決類與類之間的依賴關係的,像spring一樣,可以將類與類之間的關係配置到配置檔案中,而外觀模式就是將他們的關係放在乙個facade類中,降低了類與類之間的耦合度,該模式中沒有涉及到介面。我們先看兩張結構圖,可以一目了然的了解外觀模式的作用。未使用外觀模式 使用了外觀...
JAVA設計模式 外觀模式
外觀模式 又稱為門面模式 是一種結構型設計模式。外觀模式的思想是 為子系統的各個模組提供乙個統一的門面,由門面負責對客戶提供服務。外觀模式涉及2個角色 當一次的功能訪問同時呼叫到多個物件時,可以使用外觀模式。例如,在分布式應用中,通過遠端呼叫服務,使用外觀模式可以降低應用程式與服務的互動次數,同時可...