1、定義
提供一個統一的接口,用來訪問子系統的一羣接口,外觀模式定義了一個高層接口,讓子系統更容易使用。
2、關鍵點
① 當需要簡化並統一一個很大的接口或者一羣複雜的接口時,使用外觀模式。
② 外觀模式將客戶端從一個複雜的子系統中接口。
③ 實現外觀模式,需要將子系統組合進外觀中,然後將具體操作委託給子系統。
3、UML類圖
4、代碼實現
/**
* 通話子系統
*/
public class CallSystem {
public void call(){
System.out.println("CallSystem:call");
}
public void hangUp(){
System.out.println("CallSystem:hang up");
}
}
/**
* 攝像頭子系統
*/
public class CameraSystem {
public void takePicture() {
System.out.println("CameraSystem:take picture");
}
public void closeCamera() {
System.out.println("CameraSystem:close camera");
}
}
/**
* 外觀模式高層接口
*/
public class MobilePhone {
private CallSystem caller = new CallSystem();
private CameraSystem camera = new CameraSystem();
public void call() {
caller.call();
}
public void hangUp(){
caller.hangUp();
}
public void takePicture(){
camera.takePicture();
}
public void closeCamera(){
camera.closeCamera();
}
}
5、總結
優點:① 隱藏子系統接口,對外提供一個統一的高層接口,減少客戶端與子系統之間的耦合,更加便於使用。
缺點:① 外觀接口接口膨脹,外觀對象包含了過多的子系統接口,一定程度上增加了使用成本。
② 沒有遵循開閉原則,當業務出現變更時,可能需要修改外觀類。
代碼:https://gitee.com/os2chen/DesignPattern
參考:《Head First Design》、《Android源碼設計模式解析與實戰》