千家信息网

Tomcat模板方法模式怎么实现

发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,本篇内容介绍了"Tomcat模板方法模式怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说到模
千家信息网最后更新 2024年10月25日Tomcat模板方法模式怎么实现

本篇内容介绍了"Tomcat模板方法模式怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

说到模板方法模式,会在Tomcat以及许多面向对象的代码中,大量使用到。

这个名称已经比较形象了。

就像责任链的核心是Chain对象的传递一样,这个模式的核心是模板方法

所谓模板,就是提供了一种默认的样式。像成语描述"一模一样",这里的模,是指模子,通过这个来做出多个一样的产品,而我们代码里的模板方法也是提供一种默认的执行逻辑,但是,至于逻辑中使用到的方法的细节,可以提供给子类来详细实现。

例如,下面的代码,是Tomcat中在创建请求处理器的时候的方式:

protected abstract P createProcessor();


protected abstract void initSsl(SocketWrapper socket,
Processor processor);


public SocketState process(SocketWrapper wrapper,
SocketStatus status) {
Processor 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模板方法模式怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0