Tomcat 系统架构与设计模式之二.docx
上传人:qw****27 上传时间:2024-09-11 格式:DOCX 页数:7 大小:340KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

Tomcat 系统架构与设计模式之二.docx

Tomcat系统架构与设计模式之二.docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://blog.csdn.net/xyls12345/article/details/26354607"Tomcat系统架构与设计模式之二门面设计模式门面设计模式在Tomcat中有多处使用,在Request和Response对象封装中、StandardWrapper到ServletConfig封装中、ApplicationContext到ServletContext封装中等都用到了这种设计模式。门面设计模式的原理这么多场合都用到了这种设计模式,那这种设计模式究竟能有什么作用呢?顾名思义,就是将一个东西封装成一个门面好与人家更容易进行交流,就像一个国家的外交部一样。这种设计模式主要用在一个大的系统中有多个子系统组成时,这多个子系统肯定要涉及到相互通信,但是每个子系统又不能将自己的内部数据过多的暴露给其它系统,不然就没有必要划分子系统了。每个子系统都会设计一个门面,把别的系统感兴趣的数据封装起来,通过这个门面来进行访问。这就是门面设计模式存在的意义。门面设计模式示意图如下:图1.门面示意图Client只能访问到Façade中提供的数据是门面设计模式的关键,至于Client如何访问Façade和Subsystem如何提供Façade门面设计模式并没有规定死。Tomcat的门面设计模式示例Tomcat中门面设计模式使用的很多,因为Tomcat中有很多不同组件,每个组件要相互交互数据,用门面模式隔离数据是个很好的方法。下面是Request上使用的门面设计模式:图2.Request的门面设计模式类图从图中可以看出HttpRequestFacade类封装了HttpRequest接口能够提供数据,通过HttpRequestFacade访问到的数据都被代理到HttpRequest中,通常被封装的对象都被设为Private或者Protected访问修饰,以防止在Façade中被直接访问。观察者设计模式这种设计模式也是常用的设计方法通常也叫发布-订阅模式,也就是事件监听机制,通常在某个事件发生的前后会触发一些操作。观察者模式的原理观察者模式原理也很简单,就是你在做事的时候旁边总有一个人在盯着你,当你做的事情是它感兴趣的时候,它就会跟着做另外一些事情。但是盯着你的人必须要到你那去登记,不然你无法通知它。观察者模式通常包含下面这几个角色:Subject就是抽象主题:它负责管理所有观察者的引用,同时定义主要的事件操作。ConcreteSubject具体主题:它实现了抽象主题的所有定义的接口,当自己发生变化时,会通知所有观察者。Observer观察者:监听主题发生变化相应的操作接口。Tomcat的观察者模式示例Tomcat中观察者模式也有多处使用,前面讲的控制组件生命周期的Lifecycle就是这种模式的体现,还有对Servlet实例的创建、Session的管理、Container等都是同样的原理。下面主要看一下Lifecycle的具体实现。Lifecycle的观察者模式结构图:图3.Lifecycle的观察者模式结构图上面的结构图中,LifecycleListener代表的是抽象观察者,它定义一个lifecycleEvent方法,这个方法就是当主题变化时要执行的方法。ServerLifecycleListener代表的是具体的观察者,它实现了LifecycleListener接口的方法,就是这个具体的观察者具体的实现方式。Lifecycle接口代表的是抽象主题,它定义了管理观察者的方法和它要所做的其它方法。而StandardServer代表的是具体主题,它实现了抽象主题的所有方法。这里Tomcat对观察者做了扩展,增加了另外两个类:LifecycleSupport、LifecycleEvent,它们作为辅助类扩展了观察者的功能。LifecycleEvent使得可以定义事件类别,不同的事件可区别处理,更加灵活。LifecycleSupport类代理了主题对多观察者的管理,HYPERLINK"http://66bb.org"新濠天地娱乐场66bb.org将这个管理抽出来统一实现,以后如果修改只要修改LifecycleSupport类就可以了,不需要去修改所有具体主题,因为所有具体主题的对观察者的操作都被代理给LifecycleSupport类了。这可以认为是观察者模式的改进版。LifecycleSupport调用观察者的方法代码如下:清单1.LifecycleSupport中的fireLifecycleEvent方法publicvoidfireLifecycleEvent(Stringtype,Objectdata){LifecycleEventeve