设计模式之(责任链模式)
2012-07-02 00:12
218 查看
CHAIN OF RESPONSIBLEITY(责任链模式):
在责任链模式 中,很多对象由每一个对象对其下家的引用而接。起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
打个有趣的比方:
—晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗? 如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑! (详见见下图第二种UML图)
图中上方的模型为传统的设计模式:
由是用者按照既定的次序分别调用一系列的处理类,这样这一系列的处理类就和调用者产生依赖关系。
图中下方的责任链模式:
调用方从某一个处理类调用,不和其他的类产生直接联系,由处理类将这种链式的处理关系依次想下传递,然后将结果返回给调用者,调用者根本不知道返回的结果都被那些处理中处理过。如果将这种链式关系维护在xml文件中,这样处理类之间的调用次序以及处理类的删除和扩展都可以轻松实现。
在责任链模式 中,很多对象由每一个对象对其下家的引用而接。起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
打个有趣的比方:
—晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗? 如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑! (详见见下图第二种UML图)
图中上方的模型为传统的设计模式:
由是用者按照既定的次序分别调用一系列的处理类,这样这一系列的处理类就和调用者产生依赖关系。
图中下方的责任链模式:
调用方从某一个处理类调用,不和其他的类产生直接联系,由处理类将这种链式的处理关系依次想下传递,然后将结果返回给调用者,调用者根本不知道返回的结果都被那些处理中处理过。如果将这种链式关系维护在xml文件中,这样处理类之间的调用次序以及处理类的删除和扩展都可以轻松实现。
相关文章推荐
- 4000 设计模式学习笔记之责任链模式
- 设计模式之十:责任链模式
- JAVA系列-设计模式-责任链模式
- Java设计模式之责任链模式
- 设计模式-责任链模式(Java)
- 【设计模式说开去系列】--责任链模式
- GOF23设计模式之责任链模式(chain of responsibility)与结构型模式总结经典
- 设计模式之责任链模式
- 设计模式之责任链模式
- 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)
- 设计模式(4)-行为型-责任链模式(Chain of Responsibility)
- 每天一个设计模式: 责任链模式(Chain Of Responsibility)
- Android设计模式源码解析之责任链模式
- 设计模式之责任链模式
- 设计模式——行为型模式之借助责任链模式(Chain of Responsibility)灵活完成链式处理(五)
- 设计模式—责任链模式
- 设计模式---责任链模式(C++实现)
- Java设计模式之责任链模式、职责链模式
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
- 设计模式初探-责任链模式