无废话C#设计模式之十七:Chain Of Resp
2009-04-02 08:23:09 来源:WEB开发网核心提示: l 如果没有责任链模式,这个处理流程将会多么混乱,无废话C#设计模式之十七:Chain Of Resp(5),何时采用l 从代码角度来说,如果一个逻辑的处理由不同责任对象完成,并且责任链由客户端进行配置,后者注重对象状态的转换,客户端希望能自定义这个处理流程并且不希望直接和多个责任对象发生
l 如果没有责任链模式,这个处理流程将会多么混乱。
何时采用
l 从代码角度来说,如果一个逻辑的处理由不同责任对象完成,客户端希望能自定义这个处理流程并且不希望直接和多个责任对象发生耦合的时候可以考虑责任链模式。
l 从应用角度来说,如果对一个事情的处理存在一个流程,需要经历不同的责任点进行处理,并且这个流程比较复杂或只希望对外公开一个流程的入口点的话可以考虑责任链模式。其实,责任链模式还可以在构架的层次进行应用,比如.NET中的层次异常处理关系就可以看作是一种责任链模式。
实现要点
l 有一个抽象责任角色,避免各责任类型之间发生耦合。
l 抽象责任角色中定义了后继责任角色,并对外提供一个方法供客户端配置。
l 各具体责任类型根据待处理对象的状态结合自己的责任范围来判断是否能处理对象,如果不能处理提交给上级责任人处理(也就是纯的责任模式,要么自己处理要么提交给别人)。当然,也可以在进行部分处理后再提交给上级处理(也就是不纯的责任链模式)。
l 需要在客户端链接各个责任对象,如果链接的不恰当,可能会导致部分对象不能被任何一个责任对象进行处理。
注意事项
l 责任链模式和状态模式的区别在于,前者注重责任的传递,并且责任链由客户端进行配置,后者注重对象状态的转换,这个转换过程对客户端是透明的。
系列文章:
无废话C#设计模式之一:开篇
更多精彩
赞助商链接