hotnet 发表于 2017-1-22 07:23:26

tomcat源码分析一

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

          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。
页: [1]
查看完整版本: tomcat源码分析一