结构型 外观模式

2020/06/01

隐藏了系统的复杂性,并向客户端提供一个可以访问的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

外观设计模式(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

Post Directory