什么是外观模式
外观模式属于设计模式中的结构型模式,主要适用于存在众多接口并需要按照不同顺序调用的场合,它可以为子系统的众多接口提供统一的高层调用接口,使子系统更容易使用。简单来说,外观模式就是对接口进行组合并封装成高一级的接口的模式。
举一个例子,快餐店里有许多类型的食物(类似于子系统中的接口),顾客想吃不同的食物时就需要自己去挑选(相当于其他业务组去调用不同的接口),如果快餐店自己把大多数顾客想吃的食物搭配组合起来推出套餐,那么顾客点餐就方便快捷得多,会获得比较好的体验(组合调用接口的舒适度提升)。当然,快餐店也支持顾客自己自由搭配,不是非套餐不可(不影响接口的可重用性)。
外观模式就相当于快餐店的各个套餐,对于需要重复调用的接口组合方案,我们可以新建一个中间层,由中间层给调用方提供各式各样的“套餐”。
外观模式的实现
首先是子系统的接口方法定义(这里只列举一个子系统)
public class SubSystemA {
public void methodA(){
System.out.println("接口A");
}
}
然后是编写中间接口:
public void comboMethod1(){
SubSystemA subSystemA = new SubSystemA();
SubSystemB subSystemB = new SubSystemB();
SubSystemC subSystemC = new SubSystemC();
//对于执行顺序有严格要求的组合,外观模式也能进行很好地处理
System.out.println("调用中间接口1:");
subSystemA.methodA();
subSystemB.methodB();
subSystemC.methodC();
System.out.println();
}
public void comboMethod2(){
SubSystemA subSystemA = new SubSystemA();
SubSystemD subSystemD = new SubSystemD();
SubSystemE subSystemE = new SubSystemE();
//对于执行顺序有严格要求的组合,外观模式也能进行很好地处理
System.out.println("调用中间接口2:");
subSystemA.methodA();
subSystemD.methodD();
subSystemE.methodE();
System.out.println();
}
最后是测试代码:
public static void main(String[] args) {
//中间接口在FacadePatterns类中定义,所以需要创建该类实例对象
FacadePatterns facade = new FacadePatterns();
//调用中间接口1
facade.comboMethod1();
//调用中间接口2
facade.comboMethod2();
}