國慶宅家時想到:家庭成員有妻子、女兒、我。對外我們是統一的「這個家」,就像國家對外叫「中國」,內部包含 56 個民族。這就是外觀模式:為子系統群提供一個統一、高層的介面,降低外部調用複雜度。
// 子系統角色
class Wife { protected Wife() { System.out.println("老婆偉大!"); } }
class Daughter { protected Daughter() { System.out.println("女兒可愛!"); } }
class Me { protected Me() { System.out.println("我愛我家!"); } }
// 外觀角色:統一對外入口
class FamilyOutShow {
public void myFamily() {
new Wife();
new Daughter();
new Me();
}
}
// 客戶端
public class MyFamilyTest {
public static void main(String[] args) {
new FamilyOutShow().myFamily();
}
}
FamilyOutShow,不直接依賴具體成員類。FamilyOutShow,客戶端代碼完全不動。外觀模式不創造新功能,而是提供一個「好用的門面」。下次見到「一鍵啟動」、「統一入口」,背後大概率就是它。