Tomcat中设计模式-门面模式

开篇

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

门面模式例子


Tomcat中门面模式的例子

说明:

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



说明:

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



说明:

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



ApplicationContextFacade

说明:

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


例子源码

说明:

    1. RequestFacade内部包含Request对象。
  • 2.对于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源代码阅读系列之八)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,537评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,212评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,651评论 18 399
  • 1.新作 这是七月落魄的火焰,无法钻入妇女缝制的寒衣 北风把十一月斩成了两半,就此落入十二月的冷意 好像是没发生过...
    陈恕之阅读 3,604评论 0 1
  • 二宝在学校里做了一个精美的卡片送给了爸爸,和爸爸说说节日快乐。大宝问我爸爸过啥节日啊,我和大宝说是父亲节快到了,大...
    硕新飞阅读 1,868评论 0 4

友情链接更多精彩内容