Chain of Responsibility

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41473874/article/details/80963178
Chain of Responsibility(COR)
这是设计模式中的一种设计模式,责任链模式将一些处理请求的对象都串在一根绳子上,这个处理完,下一个处理完,直到所有的对象都处理完。
责任链模式:用一系列类试图处理一个请求,他们有一个共同点(在他们之间都必须传入处理的thing),譬如说:来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果还没有处理,就传递到C类处理,就这样像一个链条走下去。他们都是处理一方面的事物,如果处理过滤的话,他们都是处理过滤的,只是过滤的东西不同而已。
我用的实例是一个类似过滤字符串,分为三个处理对象,一个是处理括号的,一个是处理某些字的,一个是处理一个标点符号的。我所处理的一句话是"人就活一次,<script>理应飞扬跋扈"
处理后的:"人就活一次:[script]理应飞扬跋丑",这些处理并没有任何含义,只是本人第一次接触的责任链模式写的小demo而已。
这个demo中我用到了接口,顺便说一下我在什么情况在用接口,如果一个动作在很多不同类中都有的,那么我采用接口的方式,如果是一类事物中的抽象我采用抽象类。
接口设计:这是处理的接口,有两个方法,第一个方法是用来过滤一些普通字符串的,第二个方法是用来过滤请求和答复的,类似于SpringMVC中的拦截器和Servlet的拦截器。

三个处理实现类:
处理括号的类:

处理字的类:

处理标点符号的类:

设计的处理链类:

index是用来记录下标的,第一次请求取出存放在集合的第一个处理类,依次处理。我们在处理普通字符串的时候是依次遍历集合中存放的处理器直接来处理,但是当我们需要处理类似请求和回复的这些请求时就不行了,我们需要类似递归这种函数,但是在这我们显然用不来递归,递归是在处理自身问题和子问题的时候一毛一样的处理才可以使用。因此我们采用正在处理请求的处理器去调用下一个处理器,这样我们就需要类似上面代码的设计了。责任链模式我暂时刚接触,理解还不是很好。这些东西要多去想,多去琢磨。

猜你喜欢

转载自blog.csdn.net/qq_41473874/article/details/80963178