责任链模式的特定啊

  • 我们可以看到同等级的对象,按照自己被添加的次序来安排,这点非常重要,在实际应用中,我们都是将解答能力最弱的类放到最前面,然后一点点加强,这样可以使得解答能力比较弱的类有机会去解答,正如我们的例子,如果让解答能力强的类直接去处理问题,能够处理就不回传给下一个了,当然我们也看到这里面有的类能力有限,有的类和其他类的能力有重叠部分,当然也有所有类都解决不了的问题。
  • 通过责任链,我们可以将问题与处理问题的对象分离出来,特别适合用于不知道发生的问题到底是什么(有很多选择)但是又必须处理的情况(按照每个选择情况设计相应的处理类),这样就弱化了请求问题的人和回答问题的人的关系,如果不得不让发出请求的人知道处理请求的人,这样就不利于代码的复用,因为需要在请求问题的对象之中调用处理请求的对象,而使用责任链模式就能很好的规避这一点,便于将这部分代码独立出来,当做组件使用,符合开闭原则。
  • 同样的我们看到在责任链中使用了模板方法,在父类中抽象的定义了将要处理的流程,使得扩充起来非常方便,修改起来也很方便。利用委托的思想,不过这次是自己使用自己,通过责任链,其实就是一个链表,来处理问题是非常好的一种思想。可以动态地修改责任链,同时也使得每个责任链上的对象可以专注于自己的问题,这样思路清晰,便于扩展,但是使用责任链模式因为不断地调用能够处理某个问题的对象(遍历链表)和直接就能知道谁去处理的方式相比肯定会出现延迟,这就需要一个取舍了。
  • 最后,我们要注意,resolve()的属性是protected,这样做的好处是可以让同一个包或者子类使用该方法,而不会让其他包的类使用,因为解决问题的方法就应该是子类使用的,这样可以使得该方法不被误用。而将失败和成功方法设为protected,也是可以让子类去继承和修改,而不让其他包中的类使用,对于support()方法就是可以让其他包使用的,因此使用public,这一点可以看出写代码的严谨度。
总结

责任链使用了模板方法和委托的思想构建了一个链表,通过遍历链表来一个个询问链表中的每一个节点谁可以处理某件事情,如果某个节点能够胜任,则直接处理,否则继续向下传递,如果都不能处理next==null,则处理结束。责任链会造成处理的时延,但是能够解耦合,提高可扩展性,使得处理方法的类更专注于处理把自己的事情,便于扩展和改变处理的优先级,应用也非常的广泛。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值