外觀模式說明
說明:外觀模式是用於由於子系統或程序組成較複雜而提供的一個高層界面接口,使用客戶端更容易訪問底層的程序或系統接口;
外觀模式是我們經常使用遇到的模式,我們經常涉及到的功能,可能需要涉及到幾個子介面或子系統,而我們的某個功能,可能只需要這向個多個子介面中的一個或幾個組成的順序封裝。如果是業務功能直接對應子介面或子系統的,可能會要求開發人員對內部需要相當的了解;你可能需要去了解業務流程是怎麼走,他的順序是什麼,等等。這即需要開發員了解業務,也使得客戶端程式設計變得相當的複雜;
這裡如果有一層,或是一個類,專門提供好封裝好我們要使用的方法,客戶端功能只需要與這個中間層類交互,中間層類的相應方法有了解業務的相關開發人員組織封裝,那麼程式將變得非常的簡單,程式設計師只需要知道他這個功能所需要對應方法是哪個即可,也不用知道內部的邏輯。
這個中間層類就是我們說的外觀類,這就是外觀模式的想法。
場景實例:
1>. 例如總開關的例子,這個總開關,可以控製家裡的大門的一盞燈,大廳的幾盞燈,並控制著家電視機,電冰箱等的供電,你把哪個小按鈕按上“ON”,哪個就有了電,甚至直接發光輸熱,你不必知道,這總開關上的按鈕是怎麼出來電的,或者是怎麼按製到相關電器的,反正直接壓上就來電了。
這些個電燈,電視機等就是我們要使用的接口,小系統;這個總開關就是我們的外觀類,我們直接面對它操作即可。
2>. 還好比一個公司,有好幾個職能部門,老闆哪一天需要各方面工作的執行情況了,他就跑去一個個部門內部,問個員工說這個某某事情辦得怎麼樣了,如果問對人了能直接給老闆答案,要是不是這個人負責的,他還會跟老闆說,哦,這事是誰誰負責的,老闆還得跑去問下那人,多麻煩。
如果每個職能部門設個主管負責人,老闆直接去找它了解情況就可以了,老闆也不用關心這個負責人是怎麼知道這些的,他只要想了解的這麼1,2,3件事情的情況跟進展即可。
實例源碼
現在按第二個實例場景實作原始碼:
1. 幾個部門職能類別:
部門1 (業務部門):
部門2(研發部門):
以上是各部門主管所要回答老闆的問題;
接下來建立外觀類,用於組織老闆想問的問題;
接下來老闆把兩位經理叫到面前,開始問話了:
其他說明
使用外觀模式,可以使得介面或類別之間解耦,使得類別之間不必產生依賴,不必要使用時得A包含B,或是B一定得包含A,這違反了關閉修改原則,使用中間層外觀類別包裝,可以使得介面呼叫變得簡單,使用子介面或子系統物件呼叫變得更加自由可組織。
外觀模式經常出現我們的程式設計中,外觀模式經常使用在架構系統的模式定義中出現,我們的系統要使用第三方的介面服務,也經常再加層外觀層用於組織可用的業務接口;