1类图
2定义
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。提供一个高层次的接口,使得子系统更易于使用。
3应用场景
3.1 为一个复杂的子系统提供一个简单的接口。子系统往往因为不断演化而变得越来越复杂,甚至可能被替换。大多数模式使用时都会产生更多,更小的类,在这使子系统更具有重用性的同时也更容易对子系统进行定制,修改,这种易变性使得隐藏子系统的具体实现变得尤为重要。也可以提供一个简单统一的接口,对外隐藏子系统的具体实现,隔离变化。
3.2 当你需要构建一个层次结构的子系统时,使用该模式定义子系统中每层的入口点。如果子系统之间的相互依赖的,你可以让它们仅通过Facade接口通信,从而简化了它们之间的依赖关系。
4手机类
public class MobilePhone {
private Phone mPhone = new PhoneImpl();
private Camera mCamera = new SamsungCammera();
public void dail(){
mPhone.dail();
}
public void videoChat(){
System.out.println("--> 视频聊天接通中...");
mCamera.open();
mPhone.dail();
}
public void hangup(){
mPhone.hangup();
}
public void takePicture(){
mCamera.open();
mCamera.takePicture();
}
public void closeCamera(){
mCamera.close();
}
}
5打电话接口
public interface Phone {
public void dail();
public void hangup();
}
6打电话
public class PhoneImpl implements Phone{
@Override
public void dail() {
System.out.println("打电话!");
}
@Override
public void hangup() {
System.out.println("挂断!");
}
}
7相机接口
public interface Camera {
public void open();
public void takePicture();
public void close();
}
8相机类
public class SamsungCammera implements Camera{
@Override
public void open() {
System.out.println("打开相机");
}
@Override
public void takePicture() {
System.out.println("拍照");
}
@Override
public void close() {
System.out.println("关闭相机");
}
}
9测试类
public class test {
public static void main(String[] args) {
MobilePhone nexus6 = new MobilePhone();
nexus6.takePicture();
nexus6.videoChat();
}
}