本文共 918 字,大约阅读时间需要 3 分钟。
责任链可能是一条直线、一个环链甚至一个树结构的一部分
1> 抽象处理者角色:定义出一个处理请求的接口,假如需要,接口可以定义出一个方法,以返回对下家的引用
2> 具体处理者角色、处理接到请求后,可以选择将请求处理掉,或者将请求传给下家
纯的责任链模式:一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给下家。不答应出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收
不纯的责任链模式:一个请求可以最终不被任何接受端所接收。纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现
1> 系统已经有一个由处理者对象组成的链。这个链可能由复合模式给出
2> 当有多于一个的处理者对会处理一个请求象,而且在事先并不知道到底由哪一个处理这对象处理一个请求,这个处理者对象是动态确定的
3> 当系统想发出一个请求给多个处理者对象中的一个,但是不明显指定是那一个处理者对象会处理此请求
4> 当处理一个请求的处理者对象集合需要动态地指定时
责任链模式降低发出命令的对象和处理命令的对象之间的耦合,它允许多于一个处理者对象根据自己的逻辑来决定哪一个处理者最终处理这个命令。换言之,发出命令的对象只是把命令传给结构的起始者,而不需要知道到底是链上的那一个节点处理了这个命令。显然,这意味着在处理命令上,允许系统有跟多的灵活性。哪一个对象最终处理一个命令可以因为由那些对象参加责任链、以及这些对象在责任链上的位置不同而有不同
首先,链结构的由来值得指出的是责任链模式并不创建出责任链。责任链的创建必须有系统的其它部分完成。责任链模式降低了请求的发送端和接收短之间的耦合,使多个对象都有机会处理这个请求。一个链可以是一条线,一个树,也可以是一个环。链的拓扑结构可以是单链通的或多连通的,责任链模式并不指定责任链的拓扑结构。但是责任链模式要求在同一个时间里,命令只可以被传给一个下家(或被处理掉);而不可以传给多于一个下家