源码解析
使用tomcat作为web容器时,接收浏览器发送过来的请求,
tomcat会将请求信息封装成ServletRequest对象,
如下图①处对象。
但是大家想想ServletRequest是一个接口,它还有一个子接口HttpServletRequest,
而我们知道该request对象肯定是一个HttpServletRequest对象的子实现类对象,
到底是哪个类的对象呢?
可以通过输出request对象,我们就会发现是一个名为RequestFacade的类的对象。
RequestFacade类就使用了外观模式。先看结构图:
为什么在此处使用外观模式呢?
定义 RequestFacade 类,分别实现 ServletRequest ,同时定义私有成员变量 Request ,并且方法的实现调用 Request 的实现。
然后,将 RequestFacade上转为 ServletRequest 传给 servlet 的 service 方法,这样即使在 servlet 中被下转为 RequestFacade ,也不能访问私有成员变量对象中的方法。
既用了 Request ,又能防止其中方法被不合理的访问。