1 外观模式
1.1 定义
外观模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。它是为子系统中的一组接口所提供的一个一致的界面应用:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。
1.2 实例
http://www.jianshu.com/p/dee45d97a4fa
在写一个简单的tomcat容器时,需要在一个处理器类ServletProcessor里面把request,response这两个对象传递给Servlet类的service(request, response)方法供servlet开发人员使用
这里的传递的request和response对象由tomcat开发人员创建,除了实现继承自javax.sevrlet.request接口和javax.servlet.response接口的方法外它们还有各自的公共方法,
把这样的对象直接给servlet开发人员存在一个安全隐患,servlet开发人员可以将request,和response对象做向上转型之后调用它们自己的公共方法,但这些方法在servlet中应该是不可用的
我们利用组合的方式分别建立request和response的外观类。然后通过request和response初始它们的外观类对象,并把它们的外观类对象传给Service()方法即可
RequestFacade 外观类包含类request,并且和request类都继承了ServletRequest接口,所以servlet程序员就可以通过外观类来调用ServletRequest接口的所有方法,同时有效屏蔽了request类自己的公共方法。ResponseFacade具有同样的功能。
2 观察者模式
http://mabusyao.iteye.com/blog/1109418
Lifecycle
Tomcat中所有可以被“Container”包含的组件(包括Container本身),都实现了这个接口。它提供了修改组件状态的方法,并使用观察者模式使得监控组件状态变化及在生命周期的不同阶段进行操作的成为可能。
修改组件状态的方法包括:
init()
start()
stop()
destroy()
组件的状态包括:
BEFORE_INIT
AFTER_INIT
BEFORE_START
START
AFTER_START
BEFORE_STOP
STOP
AFTER_STOP
BEFORE_DESTROY
AFTER_DESTROY
PERIODIC(周期性的事件)
CONFIG_START
CONFIG_STOP
所有的这些状态发生时,都会触发相应的事件,想要监听到这些事件并执行相应的操作,就需要用以下的方法注册成为其监听者:
addLifecycleListener(LifecycleListenerlistener)
findLifecycelListener()
removeLifecycleLisnter(LifecycleListenerlistener)
同时,也可以随时调用以下方法获得当前状态:
getState()
getStateName()
LifecycleListener
想要注册监听某个类的状态变化,就需要继承接口LifecycleListener,这个接口只声明了一个方法:
lifecyleEvent(LifecycleEventevent)
你需要在具体实现中决定需要监听哪些事件,对这些事件相应的做出什么样的操作。
LifecycleEvent
用来实现某个事件的final类,它的构造函数接收3个参数:
publicLifecycleEvent(Lifecycle lifecycle, String type, Object Data)
参数分别表示产生当前event的Lifecycle类,类型以及相应的数据。许多时候我们只需要设置第一个和第二个参数即可。
LifecycleBase& LifecycleSupport
LifecycleBase类提供了Lifecycle接口的默认实现,对于事件处理的具体实现是在LifecycleSupport类中,LifecycleBase的方法仅是简单的代理到LifecycleSupport的相应方法。
LifecycleSupport中的维护了一个LifecycleListener的数组,同时利用一个同步锁来确保每次只有一个线程在操作