[設計模式] 結構型:外觀模式(Facade Pattern)

什麼是外觀模式

外觀模式是一種非常簡單的模式,即使沒有了解過,對於面向對象編程的人來說,也很容易自發的寫出來。

接觸過web編程的人應該都知道MVC架構模式,從設計模式的角度看,其中的控制器C就可以看作是外觀模式的體現。

來自客戶端的請求無需知道控制器背後的實現邏輯,只需要知道控制器能做什麼事情就可以了。

通常,控制器能夠完成某項任務,但是自身並不具備實際的業務處理能力,而是根據請求數據,與其它組件或系統進行簡單或複雜的交互,這些過程對於客戶端來講,是透明無感知的。

外觀模式就是要屏蔽系統內部的複雜性,提供簡單規範的接口,供外界使用,簡化系統與外界的交互複雜度。

設計與實現

我覺的,可以這麼講,所有在瀏覽器中可以打開的web頁面都是外觀模式的體現。

通過web頁面,我們可以很方便的完成自己的事情,但是web頁面背後具體是怎麼實現的,對於使用者來說,沒有多少人會去關心背後提供服務的系統吧?

就拿股票和股票型基金來舉個例子。

想賺錢的用戶,可以自己去研究購買股票,這樣比較費事兒,因爲股票很多,要研究的也很多。

於是,就有人提出了股票型基金的概念,股票型基金就是專門購買股票的基金,爲了防範風險,通常會包含很多支股票。

對於研究股票配置嫌麻煩的用戶,就可以選擇購買股票基金,將多支股票的選配交給基金去管理,自己只需要買入或者賣出一支基金就好。

用代碼實現的話,大概就是這樣的:

// 購買多支股票
public class StockMarket {
    public void stock1() {
        System.out.println("股票1");
    }

    public void stock2() {
        System.out.println("股票2");
    }

    public void stock3() {
        System.out.println("股票3");
    }

    public void stock4() {
        System.out.println("股票4");
    }

    public void stock5() {
        System.out.println("股票5");
    }
}

// 提供兩支股票型基金
public class FundMarket {
    private StockMarket stockMarket = new StockMarket();

	// 股票型基金1購買股票1/3/5
    public void fund1() {
        stockMarket.stock1();
        stockMarket.stock3();
        stockMarket.stock5();
    }

	// 股票型基金2購買股票2/4
    public void fund2() {
        stockMarket.stock2();
        stockMarket.stock4();
    }
}

基金市場類FundMarket就相當於是股票市場類StockMarket的一個外觀模式應用。

基金fund1fund2對外屏蔽了多支股票的選擇配置,用戶購買基金以後,無需關注基金內部的股票選配,也能賺到錢(不能絕對~)

簡單總結

外觀模式是面向對象編程中封裝思想的體現和延伸,目的就是對內封存系統的複雜性,對外展示使用的簡單性。

完美契合了面向對象的編程思想~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章