1. 定义

为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
image.png

2. 实现

2.1 SubSystem1、SubSystem2、SubSystem3

  1. class SubSystem1 {
  2. public void method1() {
  3. System.out.println("SubSystem1.method1 executed.");
  4. }
  5. }
  6. class SubSystem2 {
  7. public void method2() {
  8. System.out.println("SubSystem2.method2 executed.");
  9. }
  10. }
  11. class SubSystem3 {
  12. public void method3() {
  13. System.out.println("SubSystem3.method3 executed.");
  14. }
  15. }

2.2 Facade

  1. class Facade {
  2. SubSystem1 subSystem1 = new SubSystem1();
  3. SubSystem2 subSystem2 = new SubSystem2();
  4. SubSystem3 subSystem3 = new SubSystem3();
  5. public void doSomethingFacade() {
  6. subSystem1.method1();
  7. subSystem2.method2();
  8. subSystem3.method3();
  9. }
  10. }

2.3 Client1、Client2

客户端调用三个子系统的方法就可以通过Facade层,不需要每个子系统逐一调用

  1. class Client1 {
  2. Facade facade = new Facade();
  3. public void doSomething() {
  4. facade.doSomethingFacade();
  5. }
  6. }
  7. class Client2 {
  8. Facade facade = new Facade();
  9. public void doSomething() {
  10. facade.doSomethingFacade();
  11. }
  12. }

3. 应用场景

  1. 当您需要使用复杂子系统的有限但直接的接口时,请使用Facade模 式。
    2. 当您想要将子系统组织成层时,请使用Facade。

    3. 优点

    简化客户端的调用

    4. 源码应用

    1. //tomcat
    2. org.apache.catalina.connector.RequestFacade