外观模式(Facade Pattern)指隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口的设计模式模式。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
其核心就是将复杂业务封装为统一接口,便于其它使用的地方调用。其实外观模式用的很频繁,开发时不经意间可能就用上了。使用它也是为了降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。比如开发之中用常见的MVC其实也就用到了这个模式,在service层写复杂业务,Controller层只调用service提供的具体接口就行了。
比如这个打印ABC的例子,ABC三个类实现了接口IShow,重写了方法show,分别打印A、B、C,普通调用的情况是如图所示:
是需要一个个new出来调相应的方法,这样就把所有类都暴露出来了,与客户端耦合度过高。而使用外观模式,只需要创建一个外观类ShowAll再统一一个接口就行了,这样客户端调时只需要与外观类交互就可以了。
package com.minant.facade;
/**
* @ClassName ShowAll
* @Description TODO 展示所有
* @Author MinAnt
* @Date 2020/5/26
* @Version V1.0
*/
public class ShowAll {
public void showAll() {
IShow a = new A();
a.show();
IShow b = new B();
b.show();
IShow c = new C();
c.show();
}
}
执行结果显然也是一样的:
这就是外观模式。