Java設計模式 - 外觀模式

1. 定義

提供一個統一的接口,用來訪問子系統中的一羣接口,這個高層接口使得子系統更容易使用。

2. 角色

  • Facade:外觀類
  • SubSystem:子系統類

3. 特點

  • 優點:實現了客戶和子系統的鬆耦合關係,客戶通過外觀類來對子系統進行操作,因此子系統內部的修改不會影響客戶的使用。
  • 缺點:該模式對客戶訪問子系統類增加了許多限制,降低了系統的靈活性,當增加子系統時,可能需要修改外觀類和客戶的源代碼,違反了開閉原則。

4. 示例

Restaurant:

public class Restaurant {
    private Waiter waiter;
    private Cooker cooker;
    private Cashier cashier;

    public Restaurant() {
        waiter = new Waiter();
        cooker = new Cooker();
        cashier = new Cashier();
    }

    public void doWork() {
        waiter.doWork();
        cooker.doWork();
        cashier.doWork();
    }
}

Waiter:

public class Waiter {

    public void doWork() {
        System.out.println("點餐");
    }
}

Cooker:

public class Cooker {

    public void doWork() {
        System.out.println("烹飪中");
    }
}

Cashier:

public class Cashier {

    public void doWork() {
        System.out.println("結賬");
    }
}

測試類:

public class TestFacade {

    public static void main(String[] args) {

        Restaurant restaurant = new Restaurant();
        restaurant.doWork();
    }
}


// 輸出
// 點餐
// 烹飪中
// 結賬

 

參考:
1. 《Head First 設計模式》

2. 《圖說設計模式》https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/facade.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章