JAVA設計模式什麼鬼(門面)——作者:凸凹裡歐
阿新 • • 發佈:2019-01-08
開門見山,門,建築物的入口,面,臉也。門面(Facade),通常指店鋪的門頭外表部分,當然一定要臨街才是好的商鋪,在人流量大的地方營造更好的視覺衝擊,這樣會有更多等等機會暴露給潛在顧客,否則只能是靠“酒香不怕巷子深”,靠味道來吸引人了。
當然除了光鮮亮麗的外表,更重要的是門店提供的服務了。就拿餐飲來舉例吧,如果沒有這些門店我們都怎樣吃飯呢?我們自己做又不會,算了還是找女友下廚吧。很簡單分三步走,首先找菜販買菜,其次女友下廚,最後吃完洗碗,打完收工程式碼如下。
public class VegVendor {//菜販子 public void sell(){ System.out.println("菜販子賣菜。。。"); } } public class GirlFriend {//女友 public void cook(){ System.out.println("女友烹飪。。。"); } } public class Me { public void eat(){ System.out.println("我只會吃。。。"); } public static void main(String[] args) { //找菜販子買菜 VegVendor vv = new VegVendor(); vv.sell(); //找女友做飯 GirlFriend gf = new GirlFriend(); gf.cook(); //我只會吃 Me me = new Me(); me.eat(); //誰洗碗呢?一場戰場一觸即發…… } }
期盼總是美好的……
可現實是殘酷的……恩,不管怎樣至少我們是把飯給吃完了,不吃完也不行啊。
其實我們不該找女友做飯的,而是應該僱一個專業廚師,可這下來得多大花費啊,太划不來了,也許還得我們自己洗碗……哎。其實我們也不想麻煩,還是找門店來解決吧,至於那些買菜啊,烹飪啊,洗碗收拾桌子啊我們統統都不用管了,門店可以進行資源整合與排程,這樣我們吃飯就變得如此簡單了,只需要付錢就行了,畢竟我們只會吃。
1 public class Facade { 2 3 private VegVendor vv; 4 private Chef chef; 5 private Waiter waiter; 6 private Cleaner cleaner; 7 8 public Facade() { 9 this.vv = new VegVendor(); 10 //開門前就找菜販子準備好蔬菜 11 vv.sell(); 12 //當然還得僱傭好各類飯店服務人員 13 this.chef = new Chef(); 14 this.waiter = new Waiter(); 15 this.cleaner = new Cleaner(); 16 } 17 18 public void provideService(){ 19 //接待,入座,點菜 20 waiter.order(); 21 //找廚師做飯 22 chef.cook(); 23 //上菜 24 waiter.serve(); 25 //收拾桌子,洗碗,以及其他工序…… 26 cleaner.clean(); 27 cleaner.wash(); 28 } 29 }
這下可爽了,我們再也不用去花費時間去調動那麼多資源,又是出門買菜,又是找女友做菜,洗碗擦桌什麼的。所以我們急需一個門面來解決這些問題,如果沒有門面的話,試想每家每戶每頓都做飯的話,於是我們放棄我們的專業優勢,整天花很長時間做飯才能不餓肚子,如此勞動分工不明確,社會生產率低下,國家經濟生產不景氣,最後造成GDP下滑,這就是亞當斯密的勞動分工理論。
其實這就是門面模式的用法了,門面就是一個大系統,裡面封裝了很多的子部件(或子系統),部件之間也許有複雜的邏輯關係,對於我們旁觀者來說,直接使用這些子部件是非常麻煩的一件事情,所以門面就充當了一個包裝類的角色,並且對外暴露一個介面,達到簡化客戶操作的目的,同時也是對客戶端與子系統之間的解耦。