Chain of Responsibility

本文介绍了设计模式中的责任链模式,并通过一个字符串过滤的例子详细解释了其实现方式。责任链模式可以将多个处理对象串联起来,形成一条处理链,每个对象负责处理特定类型的请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

处理字的类:

处理标点符号的类:

设计的处理链类:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值