什麼是外觀模式
外觀模式是一種非常簡單的模式,即使沒有了解過,對於面向對象編程的人來說,也很容易自發的寫出來。
接觸過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
的一個外觀模式應用。
基金fund1
和fund2
對外屏蔽了多支股票的選擇配置,用戶購買基金以後,無需關注基金內部的股票選配,也能賺到錢(不能絕對~)
簡單總結
外觀模式是面向對象編程中封裝思想的體現和延伸,目的就是對內封存系統的複雜性,對外展示使用的簡單性。
完美契合了面向對象的編程思想~~