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

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

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向下传递了。

 

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

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值