设计模式-行为型-责任链模式

定义

将请求发送者和请求接收者解耦,让请求的接收者形成链式操作,所有人都能够接收到请求,直到有人处理。

结构图

角色与理解

  • 责任链模式包含如下角色

  • Handler(抽象处理者):所有具体处理者的父类,一般定义为抽象类,定义了一个统一的处理入口,以及维持了一个抽象处理者类型对象的引用,用于形成链式处理者

  • ConcreteHandler(具体处理者):继承抽象处理者,实现统一的处理入口,将自己无法处理的请求转发给下一个处理者

  • 处理链的形成是在客户端完成的。以及处理链的顺序也是客户端决定的。

  • 纯的责任链模式

  • 处理者只有两种选择,,要么全部处理请求,要么全部不处理,不能只处理一部分

  • 请求必须被处理,不存在请求最终未被处理的情况发生

  • 不纯的责任链模式

  • 可以处理部分,然后将请求转发给下一个处理者处理

  • 请求可以不被所有处理者处理

核心代码

抽象处理者

public abstract class Handler {
    protected Handler nextSuccessor;

    public abstract void handleRequest(String request);

    public void setNextSuccessor(Handler nextSuccessor) {
        this.nextSuccessor = nextSuccessor;
    }
}

具体处理者

@Slf4j
public class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(String request) {
        if ("a".equals(request)) {
            log.info("A处理了请求");
        } else {
            this.nextSuccessor.handleRequest(request);
        }

    }
}

@Slf4j
public class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(String request) {
        if ("b".equals(request)) {
            log.info("B处理了请求");
        } else {
            this.nextSuccessor.handleRequest(request);
        }
    }
}
@Slf4j
public class ConcreteHandlerC extends Handler {
    @Override
    public void handleRequest(String request) {
        if ("c".equals(request)) {
            log.info("C处理了请求");
        } else {
            this.nextSuccessor.handleRequest(request);
        }

    }
}

客户端

public class Client {
    public static void main(String[] args) {
        Handler a, b, c;
        a = new ConcreteHandlerA();
        b = new ConcreteHandlerB();
        c = new ConcreteHandlerC();

        a.setNextSuccessor(b);
        b.setNextSuccessor(c);

        a.handleRequest("b");
    }

}

//输出结果
//INFO com.amelie.pattern.chainOfResponsibility.ConcreteHandlerB - B处理了请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Amelie11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值