一、定義
外觀模式又稱門面模式,是一種通過多個復(fù)雜的子系統(tǒng)提供一個一致的接口少态,而使這些子系統(tǒng)更加容易被訪問的模式鸽斟,該模式對外有一個統(tǒng)一接口,外部不用關(guān)心子系統(tǒng)的具體細節(jié)呢诬,這樣會大大降低應(yīng)用程序的復(fù)雜度涌哲,提高了程序的可維護性。
主要角色:
外觀角色:為多個子系統(tǒng)對外提供一個共同的接口尚镰。
子系統(tǒng):實現(xiàn)系統(tǒng)的部分功能阀圾,客戶可以通過外觀角色訪問它。
二狗唉、代碼實現(xiàn)
舉例:比如我每天下班回家都要開燈初烘,打開電視,打開空調(diào)分俯,但是這個過程我需要三步才能完成肾筐,所以我買了一個小愛同學(xué),由小愛同學(xué)來幫我打開燈電視空調(diào)缸剪。其中燈吗铐,電視,空調(diào)就是指子系統(tǒng)杏节,小愛同學(xué)指外觀角色唬渗,接下來看代碼;
燈(子系統(tǒng))
public class Light {
public void open(){
System.out.println("打開了燈");
}
}
電視(子系統(tǒng))
public class Tv {
public void open(){
System.out.println("打開了電視");
}
}
空調(diào)(子系統(tǒng))
public class AirCondition {
public void open(){
System.out.println("打開了空調(diào)");
}
}
小愛同學(xué)(外觀角色)
public class XiaoAi {
private Light light;
private Tv tv;
private AirCondition airCondition;
public void open(){
light = new Light();
light.open();
tv = new Tv();
tv.open();
airCondition = new AirCondition();
airCondition.open();
}
}
使用:
public static void main(String[] args) {
XiaoAi xiaoai = new XiaoAi();
xiaoai.open();
}
輸出:
打開了燈
打開了電視
打開了空調(diào)
外觀模式降低了子系統(tǒng)與客戶端之間的耦合度奋渔,使子系統(tǒng)的變化不會影響到調(diào)用它的客戶類镊逝,對客戶屏蔽了子系統(tǒng)組件,減少了客戶端處理的對象數(shù)目嫉鲸,缺點是不符合開閉原則撑蒜,修改很麻煩。當(dāng)一個復(fù)雜的系統(tǒng)中子系統(tǒng)很多時,即可通過外觀模式設(shè)計一個簡單的接口供客戶端訪問座菠。