介绍
* 将客户端代码封装在一起
* 如现在调用可三个方法a,b,c , 现在将其调用步骤封装到方法d中,现在只需要调用d就行了
定义
* 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用
优点
* 降低客户端代码的耦合程度
* 降低客户端对调用代码的了解程度,甚至可以一无所知
使用场景
* 降低系统复杂度
图解
图片来自CSDN博主 - lovelion
入门案例:
代码:
[子系统(被调用)]
SubSystem1:
public class SubSystem1 {
public void method(){
System.out.println("SubSystem1的method被调用");
}
}
SubSystem2:
public class SubSystem2 {
public void method(){
System.out.println("SubSystem2的method被调用");
}
}
SubSystem3:
public class SubSystem3 {
public void method(){
System.out.println("SubSystem3的method被调用");
}
}
[外观(门面)]
Facade:
public class Facade {
private SubSystem1 s1;
private SubSystem2 s2;
private SubSystem3 s3;
public Facade() {
s1 = new SubSystem1();
s2 = new SubSystem2();
s3 = new SubSystem3();
}
public void method(){
s1.method();
s2.method();
s3.method();
}
}
测试:
public class Main {
public static void main(String[] args){
//未使用外观(门面)模式之前
/*
SubSystem1 s1 = new SubSystem1();
SubSystem2 s2 = new SubSystem2();
SubSystem3 s3 = new SubSystem3();
s1.method();
s2.method();
s3.method();
*/
//使用外观(门面)模式之后
Facade facade = new Facade();
facade.method();
}
}