facade 外 觀模式,是一種結構型模式,它主要解決的問題是:元件的客戶和元件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合 面臨很多變化的挑戰。在這裡我想舉乙個例子:比如,現在有一輛汽車,我們(客戶程式)要啟動它,那我們就要發動引擎(子系統 1 ),使四個車輪(子系統 2 )轉動。但是實際中我們並不需要用手推動車輪使其轉動,我們踩下油門,此時汽車再根據一些其他的操作使車輪轉動。油門就好比系統給我們留下的介面,不論汽車是以何種方式轉動車輪,車輪變化成什麼牌子的,我們要開走汽車所要做的還是踩下油門。
gof 《設計模式》中說道:為子系統中的一組介面提供乙個一致的介面, facade 模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。
façade 外觀模式的結構大概是這樣的:
這個圖是我對 facade 模式的理解,如果大家覺得有什麼不對的地方歡迎給我指出。
我就上面說的那個情形寫一下實現**,首先我們要實現三個子系統( wheel 、 engine 、 body ):
internal
class engine
public string enginestop()
} internal class wheel
public string wheelstop()
} internal class body
} }
然後,我們再來實現汽車的facade
class
ca***cade
} public void stop()
} }
現在我們來使用客戶端程式驗證一下,**如下:
class
program
} 執行結果如下;
bmw's engine is working
bmw's wheel is circumrotating
bmw's wheel is circumrotating
bmw's wheel is circumrotating
bmw's wheel is circumrotating
bmw's engine is stoped
bmw's wheel is stoped
bmw's wheel is stoped
bmw's wheel is stoped
bmw's wheel is stoped
正如上面所說:客戶端**( program )不需要關心子系統,它只需要關心 ca***cade 所留下來的和外部互動的介面,而子系統是在 ca***cade 中聚合。
façade 模式的幾個要點:
1 、從客戶程式的角度看, facade 模式不僅簡化了整個元件系統的介面,同時對於元件內部與外部客戶程式來說,從某種程度上也達到了一種「解耦」的效果——內部子系統的任何變化不會影響到 facade 介面的變化。
2 、 facade 設計模式更注重從架構的層次去看整個系統,而不是單個類的層次。 facade 很多時候更是一種架構設計模式。
Facade設計模式
facade模式也叫外觀模式,是由gof提出的23種設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。本文介紹設計模式中的外觀 facade 模式的概念,用法,以及實際應用中怎麼樣使用facade模式進...
Facade 設計模式
目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...
Facade 設計模式
目的 解決的問題 客戶端需要乙個簡化的介面來覆蓋複雜的子系統的總體功能。討論facade 設計模式通過乙個單一的介面物件來封裝乙個複雜的子系統。這樣減少了學習子系統複雜的學習曲線。它也實現了不同潛在客戶端的低依賴性和解耦。換句話說,如果facade 是唯一訪問子系統的入口,那麼它將限制一些特性何靈活...