外觀模式
外觀模式:爲子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
外觀模式結構圖:
外觀模式結構圖代碼解析:
//四個子系統的類
class SubSystemOne{
public void methodOne(){
print("子系統方法一");
}
}
class SubSystemTwo{
public void methodTwo(){
print("子系統方法二");
}
}
class SubSystemThree{
public void methodThree(){
print("子系統方法三");
}
}
class SubSystemFour{
public void methodFour(){
print("子系統方法四");
}
}
//外觀類:外觀類需要了解子系統所有的方法或屬性,進行組合,以供外界調用。
class Facade{
private SubSystemOne one;
private SubSystemTwo two;
private SubSystemThree three;
private SubSystemFour four;
public Facade(){
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
//外觀類方法,供外界調用。
public void methodA(){
print("方法組A()-------")
one.methodOne();
two.methodTwo();
four.methodFour();
}
public void methodB(){
print("方法組B()-------")
two.methodTwo();
four.methodFour();
three.methodThree();
}
}
//客戶端調用
class Mian(){
public static void main(String[] args){
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
外觀模式完美的體現了依賴倒置原則和迪米特法則的思想,比較常用。
什麼時候使用外觀模式呢?從三個階段來看:
首先,在設計初期階段,要有意識的將不同的兩個層分離。例如經典的三層架構,在層與層之間建立外觀類,降低耦合。
其次,在項目開發階段,子系統往往因爲不斷的重構演化而變得越來越複雜,大多數模式使用時會產生很多很小的類,在客戶端調用時會帶來麻煩,增加外觀類可以提供一個簡單的接口,減少他們之間的依賴。
最後,在維護一個遺留的大型系統時,並且這個系統難以維護和擴展,但它有很重要的功能,新的需求開發必須要依賴它,此時可以爲新系統開發一個外觀Facade類,來提供高度複雜的遺留代碼的比較清晰簡單的接口,讓新系統與Facade對象交互,Facade與遺留代碼交互所有複雜的工作。