【機房收費系統合作版】——再看外觀模式
前言:這次合作版機房,在小夥伴們的商量下,決定使用外觀模式。由於個人版的時候,因為各種原因,未能使用這一模式。現在,藉著這次機會,重新認識一下這位故友。
我們先看下邊的一張圖:
這張圖大概意思就是:射鵰中的這三個人想喝茶。A圖呢,是自己泡茶。茶具、茶葉什麼都得自己準備,比較繁瑣;B圖呢,是去茶館喝茶,只要告訴服務員喝什麼茶就行,其他一概不用理會。
其實,簡單一個喝茶,中間就包含著我們今天要說的:外觀模式。
概述:
我們在架構設計的過程中,一次的功能訪問可能需要同時呼叫多個物件,那麼如果我們在呼叫的時候,能夠在應用程式中一次就能完成所有同時需要呼叫的物件,就會給我們帶來很大的方便。這時,外觀模式就是很好的借鑑。
外觀模式,它通過引入一個外觀角色來簡化客戶端與子系統之間的互動,為複雜的子系統呼叫提供一個統一的入口,降低子系統與客戶端的耦合度,且客戶端呼叫非常方便。
定義:
外觀模式:為子系統中的一組介面提供一個統一的入口。外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
結構
外觀模式的主要目的在於降低系統的複雜程度,它通過引入一個外觀角色來簡化客戶端與子系統之間的互動,為複雜的子系統呼叫提供一個統一的入口,使子系統與客戶端的耦合度降低。外觀模式並不給系統增加任何新功能,它僅僅是簡化呼叫介面。
優缺點
優點:
1、它對客戶端遮蔽了子系統元件,減少了客戶端所需處理的物件數目,並使得子系統使用起來更加容易。通過引入外觀模式,客戶端程式碼將變得很簡單,與之關聯的物件也很少。
2、它實現了子系統與客戶端之間的鬆耦合關係,這使得子系統的變化不會影響到呼叫它的客戶端,只需要調整外觀類即可。
3、一個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀物件。
缺點:
1、不能很好的限制客戶端直接使用子系統類,如果對客戶端訪問子系統類做太多的限制,則減少了可變性和靈活性。
2、如果設計不當,增加新的子系統可能需要修改外觀類的原始碼,違背了開閉原則。
適用場景:
1、當要為訪問一系列複雜的子系統提供一個簡單入口時,可以使用外觀模式
2、客戶端程式與多個子系統之間存在很大的依賴性。引入外觀類可以將子系統與客戶端解耦,從而提高子系統的獨立性和可移植性。
3、在層次化結構(三層架構)中,可以使用外觀模式定義系統中每一層的入口,層與層之間不直接產生聯絡,例如:U層和B層。通過外觀類降低聯絡,這樣,降低了層與層之間的耦合度。
拓展:
在第一遍做機房的時候,大多數人的架構圖都應該是這樣畫的吧
但我們在這次的機房合作中,架構圖如下:
相比上邊那張,我們的多了一條線。在U層和B層之間, 有些互動需要呼叫B層中的好幾個類,但有些只需要呼叫一個。所以,可以將複雜的操作,通過外觀來進行整合;而相對簡單的,直接呼叫,也是未嘗不可的。