门面模式

门面模式也叫外观模式。

定义

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。

外观模式提供一个高层次的接口,使得子系统更易于使用。

门面模式注重要求“统一的对象”,提供一个访问子系统的接口,除了这个接口不允许任何访问子系统的行为发生。

外观模式

实现

Subsystem

子系统角色,可以同时有一个或者多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。对于子系统而言,门面知识一个客户端而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class classA{
public void doSomethingA(){
//..logic a
}
}

public class classB{
public void doSomethingB(){
//. logic b
}
}

public class classC{
public void doSomethingC(){
//. logic c.
}
}

Facade

门面角色,客户端可以调用这个角色的方法。这个角色知道子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统,也就是说改角色没有实际的业务逻辑,只是一个委托类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Facade{
private classA a = new classA();
private classB b = new classB();
private classC c = new classC();

public void methodA(){
this.a.doSomethingA();
}

public void methodB(){
this.b.doSomethingB();
}

public void methodC(){
this.c.doSomethingC();
}
}

应用

优点

  • 减少系统的相互依赖
  • 提高了灵活性
  • 提高安全性

使用场景

  • 为一个复杂的模块或者子系统提供一个供外界访问的接口
  • 子系统相对独立
  • 预防低水平人员带来的风险扩散
  • 一个子系统可以有多个门面
  • 门面不参与子系统内的业务逻辑