文档地址:《设计模式之禅》
切入故事: 古代妇女的枷锁——“三从四德”
定义: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.(使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。 )
通用类图:
抽象的处理者实现三个职责: 一是定义一个请求的处理方法handleMessage, 唯一对外开放的方法; 二是定义一个链的编排方法setNext, 设置下一个处理者; 三是定义了具体的请求者必须实现的两个方法: 定义自己能够处理的级别getHandlerLevel和具体的处理任务echo。
优点: 请求和处理分开。
缺点:
1: 性能问题。
2: 调试很不方便。
注意:
链中节点数量需要控制, 避免出现超长链的情况, 一般的做法是在Handler中设置一个最大节点数量, 在setNext方法中判断是否已经是超过其阈值, 超过则不允许该链建立, 避免无意识地破坏系统性能。