设计模式之责任链模式
什么是责任链模式
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。
设想一个场景,需要对一批从客户端来的数据进行不同的操作,我们使用多个不同的类负责不同的操作,而不是使用一个类集成所有操作,这样做能让代码松耦合且简洁。
这些类被称为处理器,第一个处理器会接收请求,如果它需要执行操作则会进行一次调用,如果不需要则会将请求传递给第二个处理器。类似地,第二个处理器确认并将请求传递给责任链中的下一个处理器。如下图为责任链模式的UML图,Handler为抽象的处理类,其中有对象successor,为此类的处理类的引用,指向下一个具体处理类。handleRequest为处理方法。HandlerA与HandlerB分别为抽象类的实现,具体处理类。Client调用整个处理器的调用链,它的职责是实例化一个处理器的链,让后在第一个对象中调用handleRequest方法。

例如下图中采购单的流转过程,当采购单的金额小于5万时,主任进行审核;当采购单的金额介于5~10万之间是,副董事长审核;当采购单金额在10~50万之间是,董事长审核;当金额大于50万时,董事会进行讨论审核。

责任链模式有什么作用
责任链模式可以让处理器按以下方式处理:如果需要则处理请求,否则将请求传递给下一个处理器。
现有场景:需要根据不同的活动类型对商品价格进行失效处理。UML类图如下:AbstractActivityInvalidItemHandler为抽象类,IidInvalidItem、BrandUidInvalidItem、EventIdInvalidItem为三个实现类。

责任链模式在实际开发中的应用
AbstractActivityInvalidItemHandler

BrandUidInvalidItem

EventIdInvalidItem

IidInvalidItem

invalidRelateItemByRuleType
