一、外觀模式
所謂的外觀模式,即乙個門面類,門面類負責和各個子系統之間互動,執行相應的互動邏輯,客戶端直接與門面類互動,使得客戶端與各子系統之間隔離。對於子系統繁多,業務複雜的場景很實用,從上面的解釋中也看到了外觀模式是迪公尺特原則乙個很好的應用,其秉承著客戶端最少知道的思想。
二、業務場景
假設乙個**做活動,需要新增積分兌換禮物的業務,積分兌換禮物主要分三個模組,乙個是資格校驗(看乙個人擁有的積分是否能獲得相應的禮物),二是用積分交換禮物(積分交換禮物後,對積分進行從計算),三是兌換成功的禮物加入到物流系統並得到訂單號。這裡我們可以使用外觀模式,設計乙個兌換禮物的外觀類,讓外觀類處理禮物兌換過程中的邏輯,留乙個簡單的介面給客戶端呼叫即可。具體**如下:
從上面的類圖可以看出這嚴格來說算不上絕對的外觀模式,外觀模式應該與子系統之間完全解耦合,但是類圖顯示客戶端不僅與門面類存在依賴關係,還與各系統之間存在著依賴關係,由於上面是模擬的,我們需要在客戶端test類中建立各系統的物件,做下面乙個小小的修改,假設各子系統物件在門面物件初始化時就已經建立好:
修改後會出現上面這個類圖,這就非常符合外觀模式了。我們在這裡實現的門面類沒採用抽象的形式,如果系統需要修改與子系統的互動邏輯,只能修改門面類,這樣違背了開閉原則。如果系統業務邏輯比較穩定,長時間不會變化,這樣實現是可以的,如果系統業務邏輯變化比較快,我們可以寫乙個抽象類,讓門面類繼承該抽象類,實現不同的邏輯就繼承該抽象類重寫方法,這樣系統的擴充套件性就比較強,符合迪公尺特原則的同時也符合開閉原則。
設計模式之外觀模式
外觀模式提供了乙個統一的介面,用來訪問子系統中的一群介面。這樣可以避免客戶端和子系統之間的緊耦合。這種模式需要將一系列的子系統組合到外觀中,然後將具體的工作交給各個子系統去完成。如此一來,可以簡化介面的呼叫。其本質就是將系統與客戶端互動的地方封裝起來。這個模式,總體來說,很簡單,理解起來也不困難。依...
設計模式之外觀模式
外觀模式 為子系統中的一組介面提供乙個一直的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。即通過乙個中類來完成客戶端的請求。拿機房收費系統的上機過程來說,上機需要顯示上機者的資訊,填寫上機狀態表,填寫上機記錄表。而使用者不需要知道這些功能是怎麼實現的,只需要通過介面操作就可以完...
設計模式之外觀模式
外觀模式,為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,層與層之間建立外觀facade。在開發階段,子系統往往因不斷的重構演化而變得越來越複雜,增加外觀模式可以提供乙個簡單的...