1) 是什 么 ??
将一个子系统的接口抽取成一个高层接口 , 提供一个一致的界面
好处:
1 , 方便调用,可以忽略子系统的其他接口
2 , 将客户系统和子系统实现分离 , 提供子系统的独立性和可移植性
3 , 简化子系统的依赖关系
2)为什么?
1 , 打个比方 如果你的电脑没提供开关机按钮的话 你会怎么关机? 好吧,直接拔电源~~
先关CPU , 再关GPU...
其实开关机按钮就是一个向上抽取的一个高层接口 , 你想关闭什么 只需要用高层接口里面的方法去调就行~
3)怎么用?
看代码~~~
public class CPU {
void turnOff() {
System.out.println("关闭CPU");
}
void turnOn() {
System.out.println("开启CPU");
}
}
public class Disk {
void turnOff() {
System.out.println("关闭硬盘");
}
void turnOn() {
System.out.println("开启硬盘");
}
}
public class GPU {
void turnOff() {
System.out.println("关闭GPU");
}
void turnOn() {
System.out.println("开启GPU");
}
}
//抽取的超级接口
public class FacadeClass {
private CPU cpu;
private Disk disk;
private GPU gpu;
public FacadeClass() {
cpu = new CPU();
disk = new Disk();
gpu = new GPU();
}
void turnOffCmp() {
System.out.println("-----------准备开始关闭电脑----------");
cpu.turnOff();
disk.turnOff();
gpu.turnOff();
System.out.println("-----------电脑已经关闭-------------");
}
}
客户端代码
public class Client {
public static void main(String[] args) {
//关电脑
new FacadeClass().turnOffCmp();
}
}
执行结果:
可以发现 你要是想要实现子类不同的功能话 你只需要定义一个超级接口 , 利用空参构造,把想要用的类定义进去就行,这样可以就超级接口里面创建方法 随意调用方法了~
执行结果
4) 在什么时候用?
1 , 系统设计初期
可以参考我们经典的三层框架, 在每层中都可以设计一个高层接口,在三层结构之间调用可以降低耦合 也会更简单
2,开发阶段
由于随着系统结构的不断复杂化 ,产生得类越来越多,我们就可以增加一个外观接口,减少依赖关系
3 , 维护大型项目
利用facade 当新功能要用到老功能的依赖时, 建立一个清晰的接口,供外部使用