java23种设计模式-结构型模式-外观模式

一、定义

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

二、优点及缺点

优点:

1、减少系统相互依赖。

2、提高灵活性。

3、提高了安全性。

缺点:

1、不符合开闭原则,更改东西比较复杂。

三、代码实现:

三个子系统角色:

package com.example.demo.sjms.waiguanmoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月19日 19:10:47
 *  @Description: 类A
 */
public class ClassA {
    public void methodA(){
        System.out.println("这是方法methodA!!!");
    }
}
package com.example.demo.sjms.waiguanmoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月19日 19:10:47
 *  @Description: 类B
 */
public class ClassB {
    public void methodB(){
        System.out.println("这是方法methodB!!!");
    }
}
package com.example.demo.sjms.waiguanmoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月19日 19:10:47
 *  @Description: 类C
 */
public class ClassC {
    public void methodC(){
        System.out.println("这是方法methodC!!!");
    }
}

外观者角色:

package com.example.demo.sjms.waiguanmoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月19日 19:10:23
 *  @Description: 外观者
 */
public class Facade {
    private ClassA classA;
    private ClassB classB;
    private ClassC classC;
    public Facade(){
        this.classA = new ClassA();
        this.classB = new ClassB();
        this.classC = new ClassC();
    }
    // 统一方法
    public void allMethod(){
        classA.methodA();
        classB.methodB();
        classC.methodC();
    }
}

测试方法:

package com.example.demo.sjms.waiguanmoshi;

/**
 *  @Author: caesar
 *  @Date:2020年10月19日 19:10:48
 *  @Description: 测试类
 */
public class Test {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.allMethod();
    }
}

四、源码级别

1、java中的Class类:

 方法调用了ClassLoader、System的方法。

2、javax.faces.webapp.FacesServlet

FacesServlet实现了Servlet接口,在实现方法service()中调用了HttpServletRequest、HttpServletResponse、ApplicationContext接口的方法。

五、总结

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13842258.html