0x01:责任链模式简介
在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上进行传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模式的UML类图如下:
其中,Handler是抽象处理者,定义了一个处理请求的接口;ConcreteHandler是具体处理者,处理它所负责的请求,可访问它的后继者,如果可处理该请求就处理,否则就将该请求转发给它的后继者。主要角色如下:
抽象处理者(Handler):定义出一个处理请求的接口。如果需要接口可以定义出一个方法以设定和返回对下一个处理对象的引用。这个角色通常由一个抽象类或者接口实现。Handler类的聚合关系给出了具体子类对下一个处理对象的引用,抽象方法handleRequest()规范了子类处理请求的操作。
具体处理者(ConcreteHandler):具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下一个Handler处理。由于具体处理者持有对一个处理对象的引用,因此,如果需要具体处理者可以访问下一个处理对象。
0x02:责任链模式实现
在工作中,免不了需要进行报销。现在与报销这个业务流程来实现责任链模式。约定如下:
报销金额 0 ~ 1W 直属上司审批即可,报销级别为1;
报销金额 1W