业务场景
1、假设我们现在有两个子系统
2、子系统A,有多个内部模块,模块A、模块B和模块C
3、子系统B,现在有一个功能,需要同时依赖3个模块来实现一个功能
外观模式其实很简单,假设我们有一个系统A吧,自己内部有多个代码组件,每个代码组件都可以实现一些功能。
此时如果别的系统B要调用系统A实现某个功能,此时一种方法是,系统B调用系统A的多个代码组件的方法,最终实现一个功能。
另外一个选择,就是系统A里提供一个Facade类,系统B不需要care系统A内部有多少个代码组件,直接调用系统A的一个facade类的一个方法即可。
比如说service就是一个经典的门面模式,就是用facade包装每个子系统内部的大量代码组件,对外暴露统一简单的接口
public class FacadePatternDemo {
public static void main(String[] args) {
// 假设是子系统B
SystemFacade facade = new SystemFacade();
facade.exucute();
// 好处1:子系统2不需要care太多的模块,只要care一个门面类的接口就可以了
// 好处2:如果多个地方都要调用这段逻辑,那么如果这个逻辑变了,只需要在门面类一个地方修改就可以了
}
/**
* 子系统A的门面类
*/
public static class SystemFacade {
public void exucute() {
// 子系统A,封装了自己的多个模块,ABC,基于自己多个模块的功能,对外统一暴露出去一个功能
ModuleA moduleA = new ModuleA();
ModuleB moduleB = new ModuleB();
ModuleC moduleC = new ModuleC();
moduleA.execute();
moduleB.execute();
moduleC.execute();
System.out.println("新增的一段逻辑");
}
}
public static class ModuleA {
public void execute() {
System.out.println("子系统A的模块A的功能");
}
}
public static class ModuleB {
public void execute() {
System.out.println("子系统A的模块B的功能");
}
}
public static class ModuleC {
public void execute() {
System.out.println("子系统A的模块C的功能");
}
}
}