定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

个人理解:这个类似数据结构中的线性结构中的 “链表结构”,
链表:运行时找到头节点,然后找头结点的后继节点,再去找下一个节点的后集结点。
职责链:执行一个方法get,方法中有具体的执行过程,得到结果。如果成立就返回数据;如果结果不成立,就去执行后继对象中的get方法,直到结果成立为止。

类型:行为类模式

类图:


代码:

 

责任链模式的优缺点

责任链模式与if…else…相比,他的耦合性要低一些,因为它把条件判定都分散到了各个处理类中,并且这些处理类的优先处理顺序可以随意设定。责任链模 式也有缺点,这与if…else…语句的缺点是一样的,那就是在找到正确的处理类之前,所有的判定条件都要被执行一遍,当责任链比较长时,性能问题比较严 重。

 

责任链模式的适用场景

就像开始的例子那样,假如使用if…else…语句来组织一个责任链时感到力不从心,代码看上去很糟糕时,就可以使用责任链模式来进行重构。

 

总结

责任链模式其实就是一个灵活版的if…else…语句,它就是将这些判定条件的语句放到了各个处理类中,这样做的优点是比较灵活了,但同样也带来了风险, 比如设置处理类前后关系时,一定要特别仔细,搞对处理类前后逻辑的条件判断关系,并且注意不要在链中出现循环引用的问题。

Tagged on:

发表评论