zoukankan      html  css  js  c++  java
  • 十一个行为模式之责任链模式(Responsible Chain Pattern)

    定义:
    将具有相同接口的责任类串行在一起,解耦请求的发送者和处理者。沿着这条链进行请求,直到有对象处理它为止。

    结构图:

    • Handler:抽象处理类,定义了所有责任类处理方法的接口,不同的处理方法在子类中实现。同时持有一个其后续责任类的引用(successor),如果该请求能够被处理,则处理返回;如果不能被处理则转发给后续责任类进行处理。
    • ConcreteHandler:具体处理类,实现了具体处理请求的业务方法。首先应当判断是否具体处理该类的权限,如果有则进行处理,如果没有则转发给继任者。

    注意:

    • 责任链模式并不创建责任链,而是通过其他模式来进行构件,比如使用建造者模式。
    • 单纯的责任链模式有两个要求:一是该请求要么完全由自己处理,要么完全由继任者处理;二是要求该请求必需被一个Handler处理。
    • 不单纯的责任链模式,则不要求上述两个条件。它既可部分由当前类处理,再由继任者处理剩余部分;也可以由继任者重复处理。而且一个事件可以最终不被任何处理者对象接收。

    优点:

    • 被处理的对象无需知道具体被谁处理,不需要知道责任的之间的结构,降低了系统间的耦合。
    • 一个请求处理对象只维护了一个后继者的引用,不需要引用其他所有责任类,如果不能处理直接抛给后继者,降低了责任之间的关联度。
    • 可以动态地添加或者删除责任链,改变一个请求的处理过程,符合“开闭原则”。

    缺点:

    • 如果链较长,则有可能严重影响系统性能,并导致方法调用栈过大。
    • 如果配置不当,很有可能会产生循环链。

    适用场景:

    • 有多个对象可以处理同一请求,而具体哪个对象处理由运行时决定,而被处理的对象不需要关心谁处理。
    • 可以动态地指定一组请求处理类,并且可以动态的管理这些类。

    实例:

    ResponsibleChainPattern.java

  • 相关阅读:
    CSU 1333 Funny Car Racing
    FZU 2195 检查站点
    FZU 2193 So Hard
    ZOJ 1655 FZU 1125 Transport Goods
    zoj 2750 Idiomatic Phrases Game
    hdu 1874 畅通工程续
    hdu 2489 Minimal Ratio Tree
    hdu 3398 String
    洛谷 P2158 [SDOI2008]仪仗队 解题报告
    POJ 1958 Strange Towers of Hanoi 解题报告
  • 原文地址:https://www.cnblogs.com/zhangfei614/p/6063658.html
Copyright © 2011-2022 走看看