C 责任链模式
2018-02-13 23:40
225 查看
当 A、B两个对象 A对象处理完自己任务然后传递给B进行处理任务,B处理完任务还需要A接着处理任务,这样如果只是简单的用继承的方式,在多个对象间相互调用传递,就显得混乱和力不从心了。这时候考虑用到责任链模式,就像一串念珠一样,不断的传递下去。C的代码示例如下:
1.在以前的例子中 stack中增加代码如下:
如果pWarpped返回的是true ,则查看pPext
如果pNext为NULL,则表示当前对象是最后一个校验器,并且之前的所有校验器都返回true,因此,直接赶回最终的校验结果true。
如果pNext不为NULL,则表示后面还有校验器,将要求pNext所指向的校验器继续进行校验处理。
1.在以前的例子中 stack中增加代码如下:
typedef struct ChainedValidator{ Validator base; Validator * pWarpped; Validator * pNext; }ChainedValidator; bool validateChain(Validator * p,int val); #define newChainerValidator(warpped,next){ \ {{validateChain}, {warpped},{next}} \ } bool validateChain(Validator * p,int val) { ChainedValidator * pThis= (ChainedValidator *)p; p = pThis->pWarpped; if (!p->validator(p,val)) { return false;//1 } p = pThis->pNext;//2 return !p||p->validator(p,val);//3、4 }首先通过pWarpped指向的校验器进行校验,如果返回结果是false,则直接返回false(校验失败)
如果pWarpped返回的是true ,则查看pPext
如果pNext为NULL,则表示当前对象是最后一个校验器,并且之前的所有校验器都返回true,因此,直接赶回最终的校验结果true。
如果pNext不为NULL,则表示后面还有校验器,将要求pNext所指向的校验器继续进行校验处理。
相关文章推荐
- [创建型模式系列]Chain of Responsibility Pattern 责任链模式
- 责任链模式(三)
- 十六.行为型设计模式——Chain of Responsibility(责任链模式)
- 责任链模式(Chain of Responsibility)
- 设计模式利剑10-责任链模式
- 责任链模式小记【原创】
- 责任链模式
- 《JAVA与模式》之责任链模式
- 设计模式之责任链模式
- 设计模式系列之二_责任链模式(Chain of Responsibility)
- 【责任链模式】模拟Struts责任链工作流及简单AOP实现
- [重构到模式-Chain of Responsibility Pattern]把哈利波特购书优惠招式重构到责任链模式
- 行为型模式-----责任链模式(chain of responsibility)
- “将FizzBuzz编码招式重构到责任链模式”录屏下载
- 责任链模式
- [设计模式-行为型]责任链模式(Chain of Responsibility)
- 设计模式学习笔记——责任链模式
- 设计模式学习笔记四:责任链模式
- Tomcat源码分析(四)--容器处理链接之责任链模式
- 责任链模式