您的位置:首页 > 大数据 > 人工智能

责任链设计模式(Chain of Responsibility Pattern)-七三

2020-02-02 23:57 831 查看

简单介绍

举个栗子,还是拿支付系统来说。用户下了一个订单,那么我们需要处理用户是否使用了优惠券、活动等等

我们把订单处理的整个流程用链表的形式穿插起来,就可以形成一个责任链的形式。

当一个用户下了订单,并使用了优惠券但没有使用活动,在责任链处理中,发现用户没有参加活动,则不进行处理继续调用责任链下一步处理,遇到优惠券Handler的时候,则对其进行操作。

代码实现

public interface BaseHandler{
void doSomething(String input,BaseHandler baseHandler);
}

public class ChainHandler implements BaseHandler{
// 责任链全部调度任务
private List<BaseHandler> handlers = new ArrayList<>();
// 责任链下标
private int index;

public ChainHandler addHandler(BaseHandler baseHandler){
handlers.add(baseHandler);
return this;
}

public void doSomething(String input,BaseHandler baseHandler){
// 若下标行至数组底部,则不执行
if(index==handlers.size()) return;
// 取出任务
BaseHandler handle = handlers.get(index);
// 下标向下滑动
index ++;
handler.doSomething(input,this);
}
}

public class CouponHandler{
@Override
public void doSomething(String input,BaseHandler baseHandler){
if("优惠券".equals(input)){
System.out.println("优惠券");
// 若是只想在链中只让一个去处理则在处理的链中retur掉
// return; 停止链的调用
}
baseHadler.doSomething(input,baseHandler);
}
}
public class ActivityHandler{
@Override
public void doSomethig(String input,BaseHanndler baseHandler){
if("活动".equals(input)){
System.out.println("活动");
}
baseHandler.doSomething(input,BaseHandler);
}
}

public class Test{
public static void main(String args[]){
//创建责任链
ChainHandler chainHandler = new ChainHandler();
//给责任链添加任务
chainHandler.addHandler(new CouponHandler())
.addHandler(new ActivityHandler());
//调用责任链
chainHandler.doSomething("优惠券",chainHandler);
}
}

小结

可能有些人还没有理解这个责任链,不妨先自己用代码写写看。也许多写两边就能明白这个是什么意思啦

じゃあ、まだ今度会いましょう〜

  • 点赞
  • 收藏
  • 分享
  • 文章举报
七了个三 发布了0 篇原创文章 · 获赞 0 · 访问量 48 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: