定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式(Facade模式)提供一个高层次的接口,使得子系统更易于使用。
使用场景:
1、为一个复杂子系统提供一个简单接口。子系统往往因为不断演化而变得越来越复杂,Facade可以提供一个简单统一的接口,对外隐藏子系统的具体实现、隔离变化;(隐藏内部复杂的实现,让我们只需要看到可以使用的功能)
2、当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让他们仅通过Facade接口进行通信,从而简化他们之间的依赖关系。(需要多个子系统协调完成功能,使用Facade来解除子系统之间的依赖关系,把门面与子系统、子系统与子系统之间的关系也解糅)
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();
}
}
网友评论