Tomcat中设计模式-门面模式

  1. 云栖社区>
  2. 博客列表>
  3. 正文

Tomcat中设计模式-门面模式

晴天哥 2018-12-01 11:30:54 浏览307 评论0

摘要: 开篇  门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用,如下图所示(一图胜千言)。 Tomcat中门面模式的例子 说明: RequestFacade作为Request的门面,内部包含Request对象。

开篇

 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用,如下图所示(一图胜千言)。

门面模式例子


Tomcat中门面模式的例子

说明:

  • RequestFacade作为Request的门面,内部包含Request对象。



说明:

  • ResponseFacade作为Response的门面,内部包含Response对象。



说明:

  • StandardSessionFacade作为HttpSession的门面,内部包含HttpSession对象。



ApplicationContextFacade

说明:

  • ApplicationContextFacade作为ApplicationContext的门面,内部包含ApplicaitonContext对象。


例子源码

说明:

  • RequestFacade内部包含Request对象。
  • 对于Request对象的访问通过RequestFacade进行访问。
public class RequestFacade implements HttpServletRequest {

    public RequestFacade(Request request) {
        this.request = request;
    }

    protected Request request = null;

    public Object getAttribute(String name) {

        if (request == null) {
            throw new IllegalStateException(
                            sm.getString("requestFacade.nullRequest"));
        }

        return request.getAttribute(name);
    }

    public Enumeration<String> getAttributeNames() {

        if (request == null) {
            throw new IllegalStateException(
                            sm.getString("requestFacade.nullRequest"));
        }

        if (Globals.IS_SECURITY_ENABLED){
            return AccessController.doPrivileged(
                new GetAttributePrivilegedAction());
        } else {
            return request.getAttributeNames();
        }
    }

    public int getContentLength() {

        if (request == null) {
            throw new IllegalStateException(
                            sm.getString("requestFacade.nullRequest"));
        }

        return request.getContentLength();
    }
}



public class Request implements org.apache.catalina.servlet4preview.http.HttpServletRequest {

    private HttpServletRequest applicationRequest = null;

    protected RequestFacade facade = null;

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

        return applicationRequest;
    }
}


参考文章

Tomcat 设计模式总结(Tomcat源代码阅读系列之八)

【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论