HardBirch

JAVA设计模式之Chain-of-Responsiblility模式

时间:11-05-10 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:8 点击: 3,690 次

当一个请求可以被多个对象处理,同时又无法确定到底有谁来处理该请求,这时,我们就需要让该请求在这些对象之间一个个的接力,如果当前对象可以处理请求则处理它,否则,传递给下一个对象处理。这就是责任链模式的思想。责任链模式的组件结构图如下:

DD

可以看出,每个可能处理请求的对象实现同一个接口,同时,每个对象中维护下一个可能处理的对象,这样,就形成了一条责任链。

 

其中handle(IRequest request)方法的逻辑大致如下:

 

if(可以处理?){

     处理之;

}else{

     //交付下一个处理

     nextHandler.handle(request);

}

 

这样,就完成了责任链的模式。且这是纯的责任链模式,请求必须被一个对象处理,而且某个对象处理请求时,就不再往下传递请求了。

 

而现实中,纯的责任链模式并不多见,往往看到的都是不纯的责任链模式。但是,不管怎样,领悟思想,完成“降低耦合,代码重用”的设计目标就行。类似武学中融会贯通,达到无招胜有招的境界。

 

通过上面我们看到,责任链模式中的handle(IRequest)的逻辑比较固定,我们结合模板方法的模式,来重构一下这个责任链模式:

如下图:

TT1

我们将原来的IHandler改成了一个抽象类,其中,handle方法的逻辑固定了,子类只需要实现父类的handleRequest方法即可。

handle(IRequest request)逻辑如下:

if(!handleRequest(request)){

      nextHandler.handle(request);

}

 

你可能会对这个判断条件感到奇怪,看看hanleRequest(IRequest request)的逻辑:

 

if(该对象可以处理请求){

     //Do SomeThing!

 

      return true;

}else{

      return false;

}

 

呵呵,看到了么?如果该对象可以处理返回真,这样handle()方法就不会将request向下传递了。

 

这里只是通过这个例子再复习一下模板方法模式,呵呵,真正使用的时候,再做权衡吧!

 

 

 

 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: JAVA设计模式之Chain-of-Responsiblility模式

JAVA设计模式之Chain-of-Responsiblility模式:目前有8 条留言

  1. 8楼
    fujinyong:

    标题Chain-of-Responsiblility 这个Responsiblility MS写错了吧,Responsibility ?我就打个酱油,路过~~~~

    2011-06-02 16:55 [回复]
  2. 看了好几遍了,可还是不知道怎么用。

    2011-06-02 21:55 [回复]
  3. 6楼
    lsr90518:

    恩,大概了解了……有点像枚举哈[e01]

    2011-06-03 13:00 [回复]
  4. 全是称赞的?这不太好!

    其实哥们你理解偏了,责任链是可以继续处理的!只是每个handler处理不同的逻辑。还有你们要是看过tomcat的源码就知道责任链是怎么使用的了。

    2011-06-03 16:48 [回复]
  5. [e01][e02]

    2011-06-04 18:03 [回复]
  6. 回复 willfcareer:哥们,你没错。是可以继续处理的。[e04]

    2011-06-05 12:46 [回复]
  7. 板凳
    sy888goodboy:

    [e07]

    2011-06-07 13:56 [回复]
  8. 沙发
    xiaomao5200:

    貌似逻辑不对吧,如果当前handler不能处理,应该交给下一个handler的handleRequest方法处理,而不是handle方法处理,否则将无法继续传递,handle方法应只作判断,不能对请求做任何处理,不知道我理解是不是正确,交流一下,呵呵

    2011-09-18 10:53 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐