Skip to content

Latest commit

 

History

History

(行为)09.责任链模式.v3

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

责任链

是一种行为型设计模式,其核心思想是将请求的发送者和接收者解耦。
在这个模式中,多个对象都有机会处理这个请求,可以独立地处理或将其传递给链中的下一个对象。
这种模式常用于创建一个处理链,每个处理者依次处理请求或者直到某个处理者处理它为止。

##实现方式

声明处理者接口并描述请求处理方法的签名。
    确定客户端如何将请求数据传递给方法。 
    最灵活的方式是将请求转换为对象, 
    然后将其以参数的形式传递给处理函数。

为了在具体处理者中消除重复的样本代码, 你可以根据处理者接口创建抽象处理者基类。
    该类需要有一个成员变量来存储指向链上下个处理者的引用。 
    你可以将其设置为不可变类。 但如果你打算在运行时对链进行改变, 
    则需要定义一个设定方法来修改引用成员变量的值。

    为了使用方便, 你还可以实现处理方法的默认行为。 
    如果还有剩余对象, 该方法会将请求传递给下个对象。 
    具体处理者还能够通过调用父对象的方法来使用这一行为。
    
依次创建具体处理者子类并实现其处理方法。 每个处理者在接收到请求后都必须做出两个决定:
    是否自行处理这个请求。
    是否将该请求沿着链进行传递。
客户端可以自行组装链, 或者从其他对象处获得预先组装好的链。 
    在后一种情况下, 你必须实现工厂类以根据配置或环境设置来创建链。

客户端可以触发链中的任意处理者, 而不仅仅是第一个。 
    请求将通过链进行传递, 直至某个处理者拒绝继续传递, 或者请求到达链尾。

由于链的动态性, 客户端需要准备好处理以下情况:
    链中可能只有单个链接。
    部分请求可能无法到达链尾。
    其他请求可能直到链尾都未被处理。