1. 程式人生 > >JAVA設計模式什麼鬼(門面)——作者:凸凹裡歐

JAVA設計模式什麼鬼(門面)——作者:凸凹裡歐

開門見山,門,建築物的入口,面,臉也。門面(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下滑,這就是亞當斯密的勞動分工理論。

 

其實這就是門面模式的用法了,門面就是一個大系統,裡面封裝了很多的子部件(或子系統),部件之間也許有複雜的邏輯關係,對於我們旁觀者來說,直接使用這些子部件是非常麻煩的一件事情,所以門面就充當了一個包裝類的角色,並且對外暴露一個介面,達到簡化客戶操作的目的,同時也是對客戶端與子系統之間的解耦。