外觀模式其實很好理解的,就是將表面的東西展示給人看,內部的東西你不知道的(因爲已經封裝好了),比如一個外部系統要和公司內部5個系統進行交互,而這5個系統之間也有交互,那麼第一種就是外部系統和5個系統都進行交互;第二種就是做一個接口將外部系統需要的邏輯封裝成一個方法,該方法中包含了關於5個系統的交互方式,這樣外部系統就不用直接和5個系統交互了,直接調用接口完事。外觀模式也叫門面模式,其實說白了就是把要用的東西封裝起來使交互更加方便。
外觀模式定義:爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
<<大話設計模式>>在這章節中以買股票爲故事情節展開的,說買股票需要學習很多知識,一個不懂股票的人買會喫虧,所以不如買基金,基金是有職業經理人去操作,用外觀模式來說的話,職業經理人就是門面,關於錢如何進行投資自己不關心,自己關心的是掙錢了沒有。
差不多理解了外觀模式了,小二,該上代碼了。
1、系統1和2,就是客戶端不關心與系統1、2交互
public class SubSystemOne {
public void method(){
System.out.println("這是系統1");
}
}
public class SubSystemTwo {
public void method(){
System.out.println("這是系統2");
}
}
2外觀類,將客戶端要交互的系統邏輯封裝
public class Facade {
SubSystemOne one;
SubSystemTwo two;
public Facade(){
one = new SubSystemOne();
two = new SubSystemTwo();
}
//要處理的邏輯,將外部系統與one、two系統交互的邏輯放這裏,外部系統就不用和one、two交互了,直接與外觀類交互
public void method(){
one.method();
two.method();
}
}
3、客戶端
public class FacadeClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generatedmethod stub
//直接與外觀類交互,在此看不到one、two系統
Facade facade = new Facade();
facade.method();
}
}
看到客戶端直接和門面類Façade交互就OK了,根本不知道系統1、2類的存在。這就是傳說中的外觀模式,沒用過不知道,學習了感覺也就那樣
附上模式結構圖
總結:對於複雜難以維護的老系統,直接去改或去擴展都可能產生很多的問題,那麼我們如果去開法一個Façade與老系統的交互,那麼以後直接開發新系統調用這個接口就可以了,這就是外觀模式,一個低調而又美麗的人……