本篇内容介绍了“Tomcat模板方法模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
说到模板方法模式,会在Tomcat以及许多面向对象的代码中,大量使用到。
这个名称已经比较形象了。
就像责任链的核心是Chain对象的传递一样,这个模式的核心是模板方法。
所谓模板,就是提供了一种默认的样式。像成语描述“一模一样”,这里的模,是指模子,通过这个来做出多个一样的产品,而我们代码里的模板方法也是提供一种默认的执行逻辑,但是,至于逻辑中使用到的方法的细节,可以提供给子类来详细实现。
例如,下面的代码,是Tomcat中在创建请求处理器的时候的方式:
protected abstract P createProcessor();
protected abstract void initSsl(SocketWrapper<S> socket,
Processor<S> processor);
public SocketState process(SocketWrapper<S> wrapper,
SocketStatus status) {
Processor<S> processor = connections.get(socket);
if (status == SocketStatus.DISCONNECT && processor == null) {
// Nothing to do. Endpoint requested a close and there is no
// longer a processor associated with this socket.
return SocketState.CLOSED;
}
try {
if (processor == null) {
processor = recycledProcessors.pop();
}
if (processor == null) {
processor = createProcessor();
}initSsl(wrapper, processor);
我们看到,整个process方法是完整的处理逻辑,但在这个方法内部,会在判断processor为空的时候创建Processor,如果使用了ssl,也会初始化之。而重点就在这里,此处的createProcessor方法和initSsl方法都声明为abstract,留给子类实现。
由于Tomcat提供多种类型的Connector进行请求处理,例如有阻塞方式的,非阻塞方式的,支持AJP协议的等等,使用模板方法模式,很好的满足了多种Connector的不同创建逻辑。
例如下面的代码,分别是HttpNio和Ajp这两种Connector的Processor创建:
public Http11NioProcessor createProcessor() {
Http11NioProcessor processor = new Http11NioProcessor(...);
proto.configureProcessor(processor);
register(processor);
return processor;
}protected AjpProcessor createProcessor() {AjpProcessor processor = new AjpProcessor(...);
proto.configureProcessor(processor);
register(processor);
return processor;
}
initSsl方法也是如此。
在Tomcat的源码中,还包含大量使用该模式的地方,阅读时,你不经意间就会发现它的存在。
“Tomcat模板方法模式怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。