服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Tomcat - tomcat管道模式 pipeline与valve详解

tomcat管道模式 pipeline与valve详解

2021-09-07 17:06超人汪小建(seaboat) Tomcat

这篇文章主要介绍了tomcat管道模式 pipeline与valve详解,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑就放在阀门上,需要的朋友可以参考下

前言

在一个比较复杂的大型系统中,假如存在某个对象或数据流需要被进行繁杂的逻辑处理的话,我们可以选择在一个大的组件中进行这些繁杂的逻辑处理,这种方式确实达到了目的,但却是简单粗暴的。或许在某些情况这种简单粗暴的方式将带来一些麻烦,例如我要改动其中某部分处理逻辑、我要添加一些处理逻辑到流程、我要在流程中减少一些处理逻辑时,这里有些看似简单的改动都让我们无从下手,除了对整个组件进行改动。整个系统看起来没有任何可扩展性和可重用性。

是否有一种模式可以将整个处理流程进行详细划分,划分出的每个小模块互相独立且各自负责一段逻辑处理,这些逻辑处理小模块根据顺序连起来,前以模块的输出作为后一模块的输入,最后一个模块的输出为最终的处理结果。如此一来修改逻辑时只针对某个模块修改,添加或减少处理逻辑也可细化到某个模块颗粒度,并且每个模块可重复利用,可重用性大大增强。这种模式就是此章节要进行讨论的管道模式。

顾名思义,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑就放在阀门上,如下图,需要处理的对象进入管道后,分别经过阀门一、阀门二、阀门三、阀门四,每个阀门都会对进入的对象进行一些逻辑处理,经过一层层的处理后从管道尾处理,此时的对象就是已完成处理的目标对象。

tomcat管道模式 pipeline与valve详解

既然管道模式这么有用,我们希望能在程序中适当地考虑使用,为了实现此模式需要多个对象协作,可参考如下类图,valve接口定义了阀门的调用方法,由于阀门与阀门使用单链表结构连接所以需提供对next的操作,实现一个阀门对其进行扩展即可;pipeline接口定义了管道操作阀门的方法,包括获取第一个阀门、获取基础阀门、添加阀门等方法,管道需对其扩展。

tomcat管道模式 pipeline与valve详解

往下看如何简单实现一个管道模式:

① 阀门接口

?
1
2
3
4
5
public interface valve {
 public valve getnext();
 public void setnext(valve valve);
 public void invoke(string handling);
}

② 管道接口

?
1
2
3
4
5
6
public interface pipeline {
public valve getfirst();
public valve getbasic();
public void setbasic(valve valve);
public void addvalve(valve valve);
}

③ 基础阀门,处理逻辑仅仅是简单的将传入的字符串中”aa”替换成”bb”

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class basicvalve implements valve {
protected valve next = null;
public valve getnext() {
return next;
}
public void invoke(string handling) {
    handling=handling.replaceall("aa", "bb");
system.out.println("基础阀门处理完后:" + handling);
}
public void setnext(valve valve) {
this.next = valve;
}
}

④ 第二个阀门,将传入的字符串中”11”替换成”22”

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class secondvalve implements valve {
protected valve next = null;
public valve getnext() {
return next;
}
public void invoke(string handling) {
handling = handling.replaceall("11", "22");
system.out.println("second阀门处理完后:" + handling);
getnext().invoke(handling);
}
public void setnext(valve valve) {
this.next = valve;
}
}

⑤ 第三个阀门,将传入的字符串中”zz”替换成”yy”

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class thirdvalve implements valve {
protected valve next = null;
public valve getnext() {
return next;
}
public void invoke(string handling) {
handling = handling.replaceall("zz", "yy");
system.out.println("third阀门处理完后:" + handling);
getnext().invoke(handling);
}
public void setnext(valve valve) {
this.next = valve;
}
}

⑥ 管道,我们一般的操作是先通过setbasic设置基础阀门,接着按顺序添加其他阀门,执行时的顺序是:先添加进来的先执行,最后才执行基础阀门。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class standardpipeline implements pipeline {
protected valve first = null;
protected valve basic = null;
public void addvalve(valve valve) {
if (first == null) {
first = valve;
valve.setnext(basic);
} else {
valve current = first;
while (current != null) {
if (current.getnext() == basic) {
current.setnext(valve);
valve.setnext(basic);
break;
}
current = current.getnext();
}
}
}
public valve getbasic() {
return basic;
}
public valve getfirst() {
return first;
}
public void setbasic(valve valve) {
this.basic = valve;
}
}

⑦ 测试类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class main {
public static void main(string[] args) {
string handling="aabb1122zzyy";
standardpipeline pipeline = new standardpipeline();
basicvalve basicvalve = new basicvalve();
secondvalve secondvalve = new secondvalve();
thirdvalve thirdvalve = new thirdvalve();
pipeline.setbasic(basicvalve);
pipeline.addvalve(secondvalve);
pipeline.addvalve(thirdvalve);
pipeline.getfirst().invoke(handling);
}
}

输出的结果如下:

?
1
2
3
second阀门处理完后:aabb2222zzyy
third阀门处理完后:aabb2222yyyy
基础阀门处理完后:bbbb2222yyyy

这就是管道模式,在管道中连接一个或多个阀门,每个阀门负责一部分逻辑处理,数据按规定的顺序往下流。此模式分解了逻辑处理任务,可方便对某任务单元进行安装拆卸,提高了流程的可扩展性、可重用性、机动性、灵活性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/wangyangzhizhou/article/details/45441355

延伸 · 阅读

精彩推荐
  • Tomcat如何查看tomcat的控制台输出的方法

    如何查看tomcat的控制台输出的方法

    这篇文章主要介绍了如何查看tomcat的控制台输出的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    CaiCaiNeo11932021-08-29
  • TomcatEclipse创建tomcat实现过程原理详解

    Eclipse创建tomcat实现过程原理详解

    这篇文章主要介绍了Eclipse创建tomcat实现过程原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    海绵般汲取11642021-09-16
  • TomcatTomcat服务器的安全设置

    Tomcat服务器的安全设置

    tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐。不过,在默认配置下其存在一定的安...

    IT专家网9002021-08-03
  • Tomcat解决Tomcat的maxPostSize属性的配置需要注意的问题

    解决Tomcat的maxPostSize属性的配置需要注意的问题

    这篇文章主要介绍了解决Tomcat的maxPostSize属性的配置需要注意的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    life is wonderful12012021-09-13
  • TomcatTomcat整体结构简单介绍

    Tomcat整体结构简单介绍

    这篇文章主要介绍了Tomcat整体结构简单介绍,Tomcat的本质是一个Servlet容器。一个Servlet能做的事情是:处理请求资源,并为客户端填充response对象,需要的朋友...

    叫我田露也行12302021-09-07
  • Tomcat一次tomcat源码启动控制台中文乱码的调试过程记录

    一次tomcat源码启动控制台中文乱码的调试过程记录

    平时在使用tomcat做一些服务的时候经常遇到各种乱码问题,下面这篇文章主要给大家介绍了一次tomcat源码启动控制台中文乱码的调试过程,需要的朋友可以...

    zhoutaoping199211852021-09-24
  • TomcatTomcat安装配置方法图文教程

    Tomcat安装配置方法图文教程

    这篇文章主要为大家详细介绍了Tomcat安装配置方法图文教程,java环境变量如何配置,Eclipse安装配置方法图文教程 ,为大家分享了三个教程,感兴趣的小伙...

    Tomcat教程网13292021-08-11
  • TomcatTomcat CentOS安装实现过程图解

    Tomcat CentOS安装实现过程图解

    这篇文章主要介绍了Tomcat CentOS安装实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    agrin5842021-09-15