外觀模式:又叫做門面模式,通過為多個子系統(tǒng)提供統(tǒng)一的接口,通過統(tǒng)一的接口訪問子系統(tǒng)的模式。外部系統(tǒng)無需關(guān)注內(nèi)部系統(tǒng)的實現(xiàn)邏輯。對外來說,降低了系統(tǒng)的復(fù)雜性。
舉個例子:
假設(shè)公司要上馬一個新項目,但是新項目比較特殊,涉及到公司的多個部分,營銷部,后勤部,法務(wù)部等等,需要他們通力合作才能完成,領(lǐng)導(dǎo)就成立了一個臨時的項目組,從各個部分抽調(diào)人手過來。那么項目開始運行的時候,公司外部的客戶需要接觸這個項目的時候就直接找這個臨時的項目組,如果需要和其他部門交流,那就由這個項目組去協(xié)調(diào),而對于公司的客戶來說,就簡單多了。
用代碼實現(xiàn)一下:
各個子系統(tǒng):
// 營銷部
public class YingxiaoBu {
public void xuanchuan(){
System.out.println("打個廣告");
}
}
// 財務(wù)部
public class CaiwuBu {
public void yusuan(){
System.out.println("批個預(yù)算");
}
}
// 后勤部
public class HouqinBu {
public void zhunbei(){
System.out.println("材料準(zhǔn)備好");
}
}
外觀(門面):
public class ProjectFacade {
private YingxiaoBu yingxiaoBu = new YingxiaoBu();
private CaiwuBu caiwuBu = new CaiwuBu();
private HouqinBu houqinBu = new HouqinBu();
// 把各個子系統(tǒng)的功能進(jìn)行組合以完成特定的任務(wù)
public void project(){
System.out.println("項目開始");
yingxiaoBu.xuanchuan();
caiwuBu.yusuan();
houqinBu.zhunbei();
System.out.println("項目結(jié)束");
}
}
測試:
public class Client {
public static void main(String[] args) {
ProjectFacade projectFacade = new ProjectFacade();
projectFacade.project();
}
}
小結(jié)一下:外觀模式是對迪米特法則的具體的實現(xiàn)。其實這種方式在項目的實際開發(fā)中應(yīng)該是有不少使用的。通常我們的項目會有若干個功能相對獨立的子模塊,而有些功能就是需要這些子模塊的部分功能組合來完成,我們就會在一個類中組合子系統(tǒng),然后來完成特定的功能。