外觀模式的核心意圖是為子系統提供一個統一的高層接口,使子系統更容易被使用。簡單來說,它將多個複雜的子系統調用封裝在一個簡單的接口中,讓上層應用無需關心內部繁瑣的交互細節。這是一種結構型設計模式,雖然概念簡單,但在實際開發中極為常用,能有效降低系統耦合度。
想像一下,當你想吃橘子時,需要完成三個步驟:
如果每次都要在代碼中逐步調用這三個方法,不僅繁瑣,還違反了「高內聚、低耦合」的原則。外觀模式的做法是將這三個步驟封裝成一個 goOranger() 方法,調用者只需一行代碼即可完成整個流程。

package com.brucezhang.facade;
public class Oranger {
public void eat() {
System.out.println("eat oranger !");
}
public void buy() {
System.out.println("buy oranger !");
}
public void wash() {
System.out.println("wash oranger !");
}
}
package com.brucezhang.facade;
public class MyOranger {
private Oranger oranger;
public MyOranger(Oranger oranger) {
this.oranger = oranger;
}
// 統一入口,簡化上層調用
public void goOranger() {
oranger.buy();
oranger.wash();
oranger.eat();
}
}
package com.brucezhang.facade;
public class People {
public static void main(String[] args) {
MyOranger myOranger = new MyOranger(new Oranger());
myOranger.goOranger(); // 一鍵完成買、洗、吃
}
}
buy oranger !
wash oranger !
eat oranger !
外觀模式不限制你訪問子系統類,只是提供了一個便捷的入口。當系統演變出現多層級、多模塊時,引入外觀模式能讓架構更清晰、維護成本更低。