天天看點

java 設計模式:外觀設計模式

外觀設計模式的主要目的在于讓外部減少與子系統内部多個子產品的互動,進而讓外部能夠更簡單的使用子系統。他負責把用戶端的請求轉發給子系統内部的各個子產品進行處理。

當你要為一個複雜子系統提供一個簡單接口時

客戶程式與抽象類的實作部分之間存在很大的依賴性。引入外觀類可以将子系統與用戶端解耦,進而提高子系統的獨立性和可移植性。

當你需要建構一個層次結構的子系統時; 在階層化結構中,可以使用外觀模式定義系統中每一層的入口,層與層之間不直接産生聯系,而通過外觀類建立聯系,降低層之間的耦合度。

java 設計模式:外觀設計模式

由于外觀類維持了對多個子系統類的引用,外觀對象在系統運作時将占用較多的系統資源,是以需要對外觀對象的數量進行限制,避免系統資源的浪費。可以結合單例模式對外觀類進行改進,将外觀類設計為一個單例類。通過對外觀模式單例化,可以確定系統中隻有唯一一個通路子系統的入口,降低系統資源的消耗。

我在項目中的實踐:

在項目中經常會出現,網絡請求,快取區域,本地有緩存用本地緩存,而且網絡請求經常會在多個地方調用,如果不采用外觀模式設計,則會出現用戶端的代碼異常複雜,而且不利于維護。于是我就進行了如下改變,建立中間倉庫類來進行資料切換,用戶端隻需要進行對倉庫資料進行調用,不用關心倉庫裡資料怎樣生成的。

由于Facade類封裝了各個子產品互動過程,如果今後内部子產品調用關系發生了變化,隻需要修改facade實作就可以了

facade實作是可以被多個用戶端調用的

使得用戶端和子系統之間解耦,讓子系統内部的子產品功能更容易擴充和維護;用戶端根本不需要知道子系統内部的實作,或者根本不需要知道子系統内部的構成,它隻需要跟Facade類互動即可。