- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Tomcat系统架构与设计模式之二
门面设计模式
门面设计模式在Tomcat中冇多处使用,在Request和Response对彖封装中、
Standard Wrapper 至ij ServletConfig 封装中、Applicationcontext 至9 ServletContext 封 装中等都用到了这种设计模式。
门面设计模式的原理
这么多场合都用到了这种设计模式,那这种设计模式究竟能冇什么作用呢?顾名思义,就是 将一个东西封装成一个门面好与人家更容易进行交流,就像一个国家的外交部一样。
这种设计模式主要用在一个大的系统中有多个了系统组成时,这多个了系统肯定要涉及到相 互通信,但是每个了系统又不能将自己的内部数据过多的暴銘给其它系统,不然就没冇必要 划分了系统了。每个了系统都会设计一个门面,把别的系统感兴趣的数据封装起來,通过这 个门面来进行访问。这就是门面设计模式存在的意义。
门面设计模式示意图如下:
图1.门面示意图
I
I
Client只能访问到Fagade中提供的数据是门血设计模式的关键,至于Client如何访问 Fagade和Subsystem如何提供Facade门血设计模式并没有规定死。
Tomcat的门面设计模式示例
Tomcat中门面设计模式使用的很多,因为Tomcat中冇很多不同组件,每个组件要相互 交互数据,用门面模式隔离数据是个很好的方法。
下面是Request上使用的门而设计模式:
图2?Request的门面设计模式类图
从图中nJ以看出HttpRequestFacade类封装了 HttpRequest接口能够提供数据,通过
HttpRequestFacade访问到的数据都彼代理到HttpRequest中,通常被封装的对象都被设
为Private或者Protected访问修饰,以防止在Fagade中被直接访问。
观察者设计模式
这种设计模式也是常用的设计方法通常也叫发布■订阅模式,也就是事件监听机制,通常 在某个事件发生的前后会触发一些操作。
观察者模式的原理
观察者模式原理也很简单,就是你在做事的时候旁边总有一个人在盯着你,当你做的事情是 它感兴趣的吋候,它就会跟着做另外-?些事情。但是盯着你的人必须要到你那去登记,不然 你无法通知它。观察者模式通常包含下面这儿个角色:
Subject就是抽象主题:它负责管理所冇观察者的引用,同时定义主要的事件操作。
ConcreteSubject具体主题:它实现了抽象主题的所冇定义的接口,当自己发生变化时,会 通知所冇观察者。
Observer观察者:监听主题发生变化相应的操作接口。
Tomcat的观察者模式示例
Tomcat中观察者模式也有多处使用,i汕而讲的控制组件牛:命周期的Lifecycle就是这种模 式的体现,还有对Servlet实例的创建、Session的管理、Container等都是同样的原理。 下而主要看一下Lifecycle的具体实现。
Lifecycle的观察者模式结构图:
图3. Lifecycle的观察者模式结构图
O Recycle U L^ecycieListenef
O void addLife匚ydeListen8r(Lif8cycbListe. ? ? 0
O void addLife匚ydeListen8r(Lif8cycbListe. ? ? 0 LifecydeListener[] findLife匚丫匚leListeners() 0 void removeLife匚丫匚leListener(LifecydeLi... G void start() 门 void stooO
I
辭 f standardServer 字 s Log log
□ s Strin g[][] excepti ons
2 7 Class!! Dersistables
0 c 5tandard5erver()
Q int getDebug()
0 void setDebugfint debug)
0 Context getGlobalNamingContext()
6 void setGlobalNamingContext(Cont8xt gl... 「丿 PJfiminriRi=!q「ii irrFiv fiFitGinhFliPJFiminnRRwn ?…
O void lifecycbEvent(Lif8nt event)
△
Q SewerLifecycbListener 护 5 Log log
O int getDebug()
Q void setDebug(int debug)
0 String getDescriptors()
G void setDescriptors(String descr...
O String g
文档评论(0)