定義:要求一個子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個統(tǒng)一的對象進行。門面模式(Facade模式)提供一個高層次的接口,使得子系統(tǒng)更易于使用。
使用場景:
1、為一個復雜子系統(tǒng)提供一個簡單接口。子系統(tǒng)往往因為不斷演化而變得越來越復雜,F(xiàn)acade可以提供一個簡單統(tǒng)一的接口,對外隱藏子系統(tǒng)的具體實現(xiàn)、隔離變化;(隱藏內(nèi)部復雜的實現(xiàn),讓我們只需要看到可以使用的功能)
2、當需要構建一個層次結構的子系統(tǒng)時,使用Facade模式定義子系統(tǒng)中每層的入口點。如果子系統(tǒng)之間是相互依賴的,可以讓他們僅通過Facade接口進行通信,從而簡化他們之間的依賴關系。(需要多個子系統(tǒng)協(xié)調(diào)完成功能,使用Facade來解除子系統(tǒng)之間的依賴關系,把門面與子系統(tǒng)、子系統(tǒng)與子系統(tǒng)之間的關系也解糅)
public interface Phone {
//打電話
public void dail();
//掛斷
public void hangup();
}
public interface Camera {
public void open();
public void takePicture();
public void close();
}
public class PhoneImpl implements Phone {
@Override
public void dail() {
Log.e("打電話");
}
@Override
public void hangup() {
Log.e("掛斷");
}
}
public class SamsungCamera implements Camera {
@Override
public void open() {
Log.e("打開相機");
}
@Override
public void takePicture() {
Log.e("拍照");
}
@Override
public void close() {
Log.e("關閉相機");
}
}
public class MobilePhone {
private Phone mPhone = new PhoneImpl();
private Camera mCamera = new SamsungCamera();
public void dail() {
mPhone.dail();
}
public void videoChat() {
Log.e("-->視頻聊天接通中");
mCamera.open();
mPhone.dail();
}
public void hangup() {
mPhone.hangup();
}
public void takePicture() {
mCamera.open();
mCamera.takePicture();
}
public void closeCamera() {
mCamera.close();
}
}
public class Test {
public static void main(String[] args) {
MobilePhone nexus6 = new MobilePhone();
//拍照
nexus6.takePicture();
//視頻聊天
nexus6.videoChat();
}
}