一、门面模式定义

1.门面模式又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口。其主要特征是定义了一个高层接口,让子系统更容易使用,属于结构型模式

2.门面模式的应用场景

  A.子系统越来越复杂,增加门面模式提供简单接口

  B.构建多层系统结构,利用门面对象作为每层的入口,简化层间调用

 

二、门面模式的通用写法

1.门面模式主要包含2种角色:

  A.外观角色(Facade):也称门面角色,系统对外的统一接口

  B.子系统角色(SubSystem):可以同时有一个或多个SubSystem。每个SubSystem不是一个单独的类,而是一个类的集合。SubSystem并不知道Facade的存在,对于SubSystem而言,Facade只是另一个客户端而已

 

2.代码示例

 1 public class SubSystemA {
 2     public void doA(){
 3         System.out.println("doing A stuff");
 4     }
 5 }
 6 
 7 public class SubSystemB {
 8     public void doB(){
 9         System.out.println("doing B stuff");
10     }
11 }
12 
13 public class SubSystemC {
14     public void doC(){
15         System.out.println("doing C stuff");
16     }
17 }
18 
19 public class Facade {
20 
21     private SubSystemA a = new SubSystemA();
22     private SubSystemB b = new SubSystemB();
23     private SubSystemC c = new SubSystemC();
24 
25     public void doA(){
26         this.a.doA();
27     }
28 
29     public void doB(){
30         this.b.doB();
31     }
32 
33     public void doC(){
34         this.c.doC();
35     }
36 }
37 
38 public class FacadeTest {
39     public static void main(String[] args) {
40         Facade facade = new Facade();
41         facade.doA();
42         facade.doB();
43         facade.doC();
44     }
45 }

 

2.门面模式的优缺点:

  A.优点

    a.简化了调用过程,无需深入了解子系统,以防给子系统带来风险

    b.减少系统依赖、松散耦合

    c.更好地划分访问层次,提高了安全性

    d.遵循迪米特法则,即最少知道原则

  B.缺点

    a.当增加子系统和扩展子系统行为时,可能容易带来未知风险

    b.不符合开闭原则

    c.某些情况下可能违背单一职责原则