`
shenkun_918
  • 浏览: 26735 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

tomcat源码分析一

阅读更多

         IBM开发者上面有淘宝架构师写的文章《Tomcat 系统架构与设计模式》(http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/)。结合这2 篇文章的分析,对tomcat对设计模式的使用对原代码进行了分析。
       首先看下“门面模式”,首先看下门面模式的介绍:[size=10.5pt; font-family: 宋体;]一个大系统会有很多小系统,每个小系统之间又会有通信。为了保护每个小系统内部的数据,可以为每个小系统设计一个门面,把系统间通信的数据封装起来,提供给其他系统调用。这样的做法,简化层于层的依赖关系,提高子系统的独立性和可移植性。在阎宏的《设计与模式》中比将门面模式比做,医院的每一个科室,有挂号,门诊,从现实社会的角度对门面模式进行了阐述。

         接下来结合源代码,来看下门面模式在tomcat中的应用。

 uml

        org.apache.catalina.core.StandardWrapperFacade封装了获取Servlet的信息,对外提供信息。用户就不用访问StandardWrapper来获取信息。结合上面的类图,看下StandardWrapperFacade的代码就会很明白门面模式在此处的运用了。

      

private ServletConfig config = null;//此处私有,用于保护子系统信息
//构造器,初始化
public StandardWrapperFacade(StandardWrapper config) {
        super();
        this.config = (ServletConfig) config;
}
//以下是所有获取信息的方法,是从StandardWrapper 类中获取信息
public String getServletName() {
        return config.getServletName();
}
public ServletContext getServletContext() {
        if (context == null) {
            context = config.getServletContext();
            if ((context != null) && (context instanceof ApplicationContext))
                context = ((ApplicationContext) context).getFacade();
        }
        return (context);
    }
  public String getInitParameter(String name) {
        return config.getInitParameter(name);
    }


    public Enumeration getInitParameterNames() {
        return config.getInitParameterNames();
    }

    同时,我们也可以看到其他代码也用到了门面模式。tomcat源代码中有很好的命名习惯,就是对于门面模式使用的类都用Facade(表面,假象,外观)。其中对于Request和Response都有相应的RequestFacade和ResponseFacade。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics