一、问题
1、学校OA系统的采购项目需求
1)采购员采购器材
2)金额小于等于5000,由教学主任审批(0<= x <= 5000)
3)金额小于等于10000,由院长审批(5000<= x <= 10000)
4)金额小于等于3000,由副校长审批(10000<= x <= 30000)
5)金额超过30000,由教学主任审批(30000<x )
2、不用设计模式传统方式
1)接收到一个采购请求,根据采购金额来调用对应的Approver(审批人)完成审批
2)分析:客户端在这里会使用到分支判断(Switch 等)来对不同的采购请求处理,这样就存在如下问题
如果各个级别的人员审批金额发生变化,在客户端的也需要变化;客户端必须明确的知道有多少个审批级别和访问;这样对一个采购请求进行处理和Approver(审批人)就存在强耦合关系,不利于代码的扩展和维护
3、职责链模式
1)职责链模式(Chain of Responsibility Pattern),又叫责任链模式,未请求创建一个接受者对象的链。对请求发送者和接受者进行解耦。
2)职责链模式通常每一个接受者都包含对另一个接受者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接受者,依次类推,指导有一个对象处理它为止。
3)属于行为设计模式
百度百科:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
4、Handler:抽象的处理者,定义了一个处理请求的接口,同时包含另外Handler
ConcreteHandlerA/B 具体的处理者,处理它自己负责的请求,可以访问它的后继者(即下一个处理者),如果可以处理当前请求,则处理,否则就请请求交给后继者去处理,从而形成一个职责链。
Request:表示请求(有属性)
Client 调用方
5、SpringMVC请求就是调用的职责链模式