隐藏了系统的复杂性,并向客户端提供一个可以访问的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
外观设计模式(Facade),又称为门面设计模式。
实现
一位病人去医院看病,他要去挂号,然后检查,取药,医院是一个大系统,而病人需要和每一个子部门去打交道。比较麻烦。
而如果使用门面设计模式,就是在医院设置一个接待员,由接待员来帮助病人分别去和各个部门打交道。如下
门面设计模式就是这么简单,下面再通过代码来实现。
ModuleA{
public void testA(){
}
}
ModuleB{
public void testB(){
}
}
ModuleC{
public void testC(){
}
}
没有使用门面设计模式是这样来调用的
public class Customer{
public static void main(String[] args){
ModuleA moduleA=new ModuleA();
moduleA.testA();
ModuleB moduleB=new ModuleB();
moduleB.testB();
ModuleC moduleC=new ModuleC();
moduleC.testC();
}
}
使用门面设计模式进行改造
先添加一个门面类,来封装模块
public class Facade{
public void test(){
ModuleA moduleA=new ModuleA();
moduleA.testA();
ModuleB moduleB=new ModuleB();
moduleB.testB();
ModuleC moduleC=new ModuleC();
moduleC.testC();
}
}
然后这样来调用
public class Customer{
public static void main(String[] args){
Facade facade=new Facade();
facade.test();
}
优缺点
1.减少系统相互依赖 2.提高灵活性 3.对外部屏蔽底层的实现细节,提高安全性
实例
日志框架就是采用的这种模式,比如:slf4j commons-logging