责任链模式(设计模式详解)

描述

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理链进行传递,直到其中一个处理器处理请求为止。

在责任链模式中,有一个处理器链,每个处理器都尝试处理请求,如果自己不能处理,它会将请求传递给链中的下一个处理器,直到请求被处理为止。

实现

处理器抽象

public abstract class Handler {
  protected Handler next;
  public Handler(){}

  abstract boolean handle();

  Handler addHandler(Handler next){
    this.next = next;
    return this;
  }
}

处理器实现

public class AuthHandler extends Handler{
    @Override
    boolean handle() {
        System.out.println("Unseccess Auth");
        return false;
    }
}
public class LogHandler extends Handler{
    @Override
    boolean handle() {
        System.out.println("Log Handle");
        return true;
    }
}

请求抽象

public abstract class Request {
    protected Handler head;

    public Request(Handler head) {
        this.head = head;
    }

    abstract void progress();
}

请求实现

public class HttpRequest extends Request {
    public HttpRequest(Handler head) {
        super(head);
    }

    @Override
    void progress() {
        Handler handler = head;
        while (null != handler) {
            if (handler.handle()) handler = handler.next;
            else handler = null;
        }
    }
}

客户端

public class Client {
  public static void main(String[] args) {
    Handler handler = new AuthHandler().addHandler(new LogHandler());
    Request request = new HttpRequest(handler);
    request.progress();
  }
}
实现结果

在这里插入图片描述

使用场景

  • 请求的处理需要按照一定的顺序进行。例如,一个订单需要先进行库存检查,然后进行价格计算,最后进行支付操作。这个过程中,如果库存不足,则无法进行价格计算和支付操作。

  • 一个请求可能需要被多个处理器处理。例如,一个订单可能需要经过多个审核流程,每个审核者都需要审核订单的不同方面。在这种情况下,责任链模式可以将整个审核流程分解成多个处理器。

  • 在不知道请求应该由哪个处理器来处理时,可以使用责任链模式。例如,一个电商网站可能需要根据用户的位置选择不同的仓库进行发货,但是网站并不知道用户的位置,可以使用责任链模式,将请求传递给多个处理器,每个处理器都尝试进行用户位置的获取,直到成功获取为止。

  • 请求的处理需要动态地进行配置和更改。例如,一个流程中某个处理器的行为需要根据某个条件进行变化,可以使用责任链模式来实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值