模式動機:
引入外觀角色之後,使用者只需要直接與外觀角色互動,使用者與子系統之間的複雜關係由外觀角色來實現,從而降低了系統的耦合度。
模式動機:
外觀模式(facade pattern):外部與乙個子系統的通訊必須通過乙個統一的外觀物件進行,為子系統中的一組介面提供乙個一致的介面,外觀模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式又稱為門面模式,它是一種物件結構型模式。
uml圖:
角色:
1、facade: 外觀角色是在客戶端直接呼叫的角色,在外觀角色中可以知道相關的(乙個或者多個)子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統物件處理。
2、subsystem:子系統角色,在軟體系統中可以同時有乙個或者多個子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙個類的集合,它實現子系統的功能。
模式分析:
1、根據「單一職責原則」,在軟體中將乙個系統劃分為若干個子系統有利於降低整個系統的複雜性,乙個常見的設計目標是使子系統間的通訊和相互依賴關係達到最小,而達到該目標的途徑之一就是引入乙個外觀物件,它為子系統的訪問提供了乙個簡單而單一的入口。
2、外觀模式也是「迪公尺特法則」的體現,通過引入乙個新的外觀類可以降低原有系統的複雜度,同時降低客戶類與子系統類的耦合度。
3、外觀模式要求乙個子系統的外部與其內部的通訊通過乙個統一的外觀物件進行,外觀類將客戶端與子系統的內部複雜性分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的很多物件打交道。
4、外觀模式的目的在於降低系統的複雜程度。
5、外觀模式從很大程度上提高了客戶端使用的便捷性,使得客戶端無須關心子系統的工作細節,通過外觀角色即可呼叫相關功能。
**:public class facade
}
優缺點:
優點:
1、對客戶遮蔽子系統元件,減少了客戶處理的物件數目並使得子系統使用起來更加容易。通過引入外觀模式,客戶**將變得很簡單,與之關聯的物件也很少。
2、實現了子系統與客戶之間的松耦合關係,這使得子系統的元件變化不會影響到呼叫它的客戶類,只需要調整外觀類即可。
3、降低了大型軟體系統中的編譯依賴性,並簡化了系統在不同平台之間的移植過程,因為編譯乙個子系統一般不需要編譯所有其他的子系統。乙個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀物件。
4、只是提供了乙個訪問子系統的統一入口,並不影響使用者直接使用子系統類。
缺點:1、不能很好地限制客戶使用子系統類,如果對客戶訪問子系統類做太多的限制則減少了可變性和靈活性。
2、在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端的源**,違背了「開閉原則」。
模式擴充套件:
1、在外觀模式中,通常只需要乙個外觀類,並且此外觀類只有乙個例項,換言之它是乙個單例類。在很多情況下為了節約系統資源,一般將外觀類設計為單例類。當然這並不意味著在整個系統裡只能有乙個外觀類,在乙個系統中可以設計多個外觀類,每個外觀類都負責和一些特定的子系統互動,向使用者提供相應的業務功能。
2、不要試圖通過外觀類為子系統增加新行為
不要通過繼承乙個外觀類在子系統中加入新的行為,這種做法是錯誤的。外觀模式的用意是為子系統提供乙個集中化和簡化的溝通渠道,而不是向子系統加入新的行為,新的行為的增加應該通過修改原有子系統類或增加新的子系統類來實現,不能通過外觀類來實現。
3、外觀模式與迪公尺特法則
外觀模式創造出乙個外觀物件,將客戶端所涉及的屬於乙個子系統的協作夥伴的數量減到最少,使得客戶端與子系統內部的物件的相互作用被外觀物件所取代。外觀類充當了客戶類與子系統類之間的「第三者」,降低了客戶類與子系統類之間的耦合度,外觀模式就是實現**重構以便達到「迪公尺特法則」要求的乙個強有力的**。
迪公尺特法則:
迪公尺特法則(law of demeter)又叫作最少知識原則(least knowledge principle 簡寫lkp),就是說乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。英文簡寫為: lod.
4、外觀模式最大的缺點在於違背了「開閉原則」,當增加新的子系統或者移除子系統時需要修改外觀類,可以通過引入抽象外觀類在一定程度上解決該問題,客戶端針對抽象外觀類進行程式設計。對於新的業務需求,不修改原有外觀類,而對應增加乙個新的具體外觀類,由新的具體外觀類來關聯新的子系統物件,同時通過修改配置檔案來達到不修改源**並更換外觀類的目的。
設計模式 外觀模式
外觀模式,我的理解就是將複雜的類進行重新封裝,將簡單的介面呈現出來,降低呼叫端和實際類的耦合性。拿 大話設計模式 上邊關於 和 的例子來說。對於不入門的股民來說,交易有些過於龐大,需要學習的東西很多,如果沒整明白就進行投資,很容易賠錢的。很多剛入 的股民都賠的很慘。而買 有提出了乙個新的觀念,我們買...
設計模式 外觀模式
何為外觀模式?外觀模式 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得一子系統更加容易使用。它是一種結構型模式,它主要解決的問題是 元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和 各子系統的演化,這種過多的耦合面臨很多變化的挑戰。uml類圖 乙個...
設計模式 外觀模式
外觀模式說白了就是為一組介面提供乙個一致的介面。例如 定義三個類a b c,每個類各定義乙個方法。class a pubic void showa cout a showa pubic void showb cout b showb pubic void showc cout c showc 定義乙...