设计模式里的责任链模式的实际应用

前言

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

使用责任链模式是避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

实际使用

一个事件需要经过多个对象处理是一个挺常见的场景,譬如检验系统的检验流程。

电梯的检验流程
起重机检验流程

代码

github地址:https://github.com/shaweiwei/mall-tiny-docker-file

整体图
抽象流程处理类AbstractProcessHandler
每个流程步骤对应的处理类
两个枚举类
service类和实现类
DTO类
Controller类
启动类
application.yml

启动后用postman测试

先测试电梯检验流程
再测试起重机检验流程

总结

责任链的代码核心是nextHandler,这边因为我的两个链(电梯检验流程和起重机检验流程)是事先知道的,所以直接预先把每个handler的nexthandler设置好了。有的时候我们可能需要根据请求的具体参数(ProcessRequestDTO)里的不同属性值动态判断某个handler的nextHandler,那就可以在具体的Handler的重写的handle方法里根据参数决定set哪个handler为nextHandler。

0