Tomcat设计模式-门面模式(facade)

来源:互联网 发布:淘宝客服投诉电话400 编辑:程序博客网 时间:2024/05/18 00:46

门面模式有如下作用:

  • 为一个复杂子系统提供一个简单接口
  • 提高子系统的独立性
  • 在层次化结构中,可以使用Facade模式定义系统中每一层的入口。

 

Tomcat的request使用了面门模式。利用门面模式把request的接口进行进一步封装。在servlet中使用的request实际上是requestFacade。

org.apache.catalina.connector.Request 和org.apache.catalina.connector.RequestFacade都继承了javax.servlet.http.HttpServletRequest。实际上在servlet中也是用父类HttpServletRequest作为方法的参数,只能使用javax.servlet.http.HttpServletRequest提供的方法。

Request类通过方法getRequest() 返回门面RequestFacade,在RequestFacade中把Request的接口进一步封装。

    public HttpServletRequest getRequest() {        if (facade == null) {            facade = new RequestFacade(this);        }         return facade;    }

在http消息的传递过程中,在传递到servlet之前在org.apache.catalina.core.StandardWrapperValve.invoke()中,调用filterChain.doFilter(request.getRequest(),response.getResponse());

把传递的对象从Request转换成RequestFacade。此后Request变得不可见,用户操作对象只能是RequestFacade。这样通过门面实现了系统内部和外部操作对象的分离。


原创粉丝点击