1. 外觀模式
外觀模式(Facade Pattern),又稱為門面模式,是非常常用的結(jié)構(gòu)性設(shè)計(jì)模式。外觀模式使得客戶端程序僅能看到外觀的包裝,不知道具體的細(xì)節(jié)。例如,下班的時(shí)候,你需要關(guān)掉辦公室里的電燈、空調(diào)、飲水機(jī),一種方式是分別關(guān)閉它們的電源,另一種方式是直接拉下電閘;拉下電閘,就是外觀模式的具體應(yīng)用。
外觀模式有兩種角色。
SubSystem(子系統(tǒng)角色):子系統(tǒng)角色可以是一個(gè)類,也可以是一個(gè)獨(dú)立的子系統(tǒng);SubSystem處理Facade指派的任務(wù),SubSystem本身不知道Facade的存在。
Facade(外觀角色):Facade知道相關(guān)的SubSystem的功能,并把若干SubSystem形成一個(gè)組合。
2. 外觀模式舉例
下面我們舉一個(gè)電閘控制 電燈、空調(diào)等家用電器開關(guān)的例子。
| 序號(hào) | 類名 | 角色 | 說明 |
|---|---|---|---|
| 1 | Lamp | SubSystem | 子系統(tǒng)角色,電燈 |
| 2 | AirConditioner | SubSystem | 子系統(tǒng)角色,空調(diào) |
| 3 | Fridge | SubSystem | 子系統(tǒng)角色,電冰箱 |
| 4 | SwitchFacade | Facade | 外觀角色,電閘 |
| 5 | FacadeMain | 客戶端 | 演示調(diào)用,最后下班的人 |

Paste_Image.png
1. Lamp
// SubSystem角色,電燈
public class Lamp {
public void on(){
System.out.println("打開電燈");
}
public void off(){
System.out.println("關(guān)閉電燈");
}
}
2. AirConditioner
// SubSystem角色,空調(diào)
public class AirConditioner {
public void on(){
System.out.println("打開空調(diào)");
}
public void off(){
System.out.println("關(guān)閉空調(diào)");
}
}
3.Fridge
// SubSystem角色,冰箱。
public class Fridge {
public void on(){
System.out.println("冰箱通電");
}
public void off(){
System.out.println("冰箱斷電");
}
}
4.SwitchFacade
// Facade角色,電閘
public class SwitchFacade {
private Lamp lamp; // 電燈
private AirConditioner airConditioner; // 空調(diào)
private Fridge fridge; // 電冰箱
public SwitchFacade() {
this.lamp = new Lamp();
this.airConditioner = new AirConditioner();
this.fridge = new Fridge();
}
public void on(){
lamp.on();
airConditioner.on();
fridge.on();
}
public void off(){
lamp.off();
airConditioner.off();
fridge.off();
}
}
5. FacadeMain
// 客戶端,有了Facade,就不必和所有的子系統(tǒng)打交道了。
public class FacadeMain {
public static void main(String[] args) {
SwitchFacade facade = new SwitchFacade();
facade.on(); // 打開所有電器
facade.off(); // 關(guān)閉所有電器
}
}
3. 外觀模式總結(jié)
優(yōu)點(diǎn):
客戶端只知道外觀類,不用關(guān)心子系統(tǒng),降低了客戶端和子系統(tǒng)的耦合關(guān)系。
缺點(diǎn):
如果增加子系統(tǒng),就需要修改外觀類,容易違反開閉原則。
注意,不要在Facade類里增加子系統(tǒng)的行為。
(完)