1.問題描述
如何實現讓子系統外部的客戶端在使用子系統的時候,既能簡單地使用子系統內部模塊的功能,而又不用客戶端去與子系統內部的多個模式交互呢?
2.模式引入
爲子系統中的一組接口提供一致的界面,定義一個高層接口,這個接口使得這一子系統更加容易使用。這種模式就是外觀模式。
3.模式結構
3.1 Facade:定義子系統的多個模塊對外的高層接口,通過需要調用內部多個模塊,從而把客戶端的請求代理給適當的子系統對象。
3.2 模塊:接受Facade委派,真正實現功能,各個模塊之間可能有交互。
4.外觀模式實例
5.外觀模式本質
封裝交互,簡化調用
6.何時選用外觀模式
- 如果爲一個複雜的子系統提供一個簡單接口的時候,可以考慮使用外觀模式,使用外觀對象來實現大部分客戶端需要的功能,從而簡化客戶端的使用;
- 如果想讓客戶端和抽象類的實現部分鬆散耦合時,可以考慮使用外觀模式,使用外觀對象來將這個子系統與它的客戶端分離開,從而提高子系統的獨立性和可移植性;
- 如果要構建多層結構系統,可以考慮使用外觀模式,使用外觀對象作爲每層的入口,這樣可以簡化層間調用,也可以鬆散層次之間的依賴關係。