java责任链设计模式,实现责任链教程

2019-11-11 13:47栏目:编程
TAG:

责任链模式在我们的日常开发中会经常遇到,比如我们在servlet中的Filter过滤器,就是采用责任链模式来进行处理的,Mybatis中SqlSession下的四大对象Execute(执行器), StatementHandler(语句处理器),ResultHandler(结果集处理器)以及ParameterHandler(参数处理器)也是采用责任链模式来完成对数据的关系映射生成完整的sql和映射响应结果,还有很多很多,在这里就不一一累述了,今天主要记录一下使用java来优雅的实现责任链模式。
1. 首先我们需要先了解一下什么是责任链模式,责任链模式简单而言就是:对一个请求创建一个对象链,每个对象依序检查此请求,并对其进行处理,或者将它传递到对象链中的下一个对象进行处理,依次处理直到链尾。(也就是说当你想对一个请求在需要满足一定条件下进行多次不同的处理时,可采用此模式)
2. 首先我们定义一个抽象类Handler:

3. 我们定义一个处理器的优先级注解:
java责任链
4. 我们定义三个实现类:
(1)FirstHandler
java责任链设计模式
(2)SecondHandler
spring责任链模式
(3)ThirdHander
4. 我的包路径如下所示:

5. 在这里我们可以直接在TestChain类中测试处理链模式:
这里,我们就简单完成了对责任链模式的简单实现,但是在实际开发中,我们如果编写这样的代码是不符合开发规则的,而且难以维护和处理,如果我们有几十个处理器,我们通过上面这种方式来处理显然是不合理的,而且如果当我们想要修改责任链中处理器的执行顺序时,我们也必须要修改代码,虽然一定程度上实现了对请求者和接受者之间的解耦,但是上面这种做法是不是和实际开发的,因此我对此做了优化处理,我们编写一个对责任链的统一处理器类HandlerChain:
我们在TestChain类中测试一下:
我们修改下处理器的执行顺序,将FirstHandler中的offset改为2,SecondHandler中的offset改为1,我们查询运行结果:
在这里,我们就实现了对责任链处理器的统一管理。当然,这个程序中还有很多细节需要优化,比如说,执行顺序不应该出现相等的情况已经部分对象的执行需要加入非空判断等等,但是大体的实现机制就是这样,后续会对其完善。阅读详情教程:https://blog.csdn.net/qq_38796327/article/details/90762479

上一篇:通用mapper高级用法,mybatis中通用mapper需要注意这几点

本文来自网络,不代表山斋月平台立场,转载请注明出处: https://www.shanzhaiyue.top