责任链模式(Java)

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。

代码简单实现
abstract class Handler {

	# 指向下一个处理器
    private Handler next;

    public Handler getNext() {
        return next;
    }

    public void setNext(Handler next) {
        this.next = next;
    }

    public abstract void handle(String request);
}

class AuthHandler extends Handler {
    @Override
    public void handle(String request) {
        if ("admin".equals(request)){
            if (getNext() == null){
                System.out.println("无人处理此请求");
            }
            else {
                //把请求传给下一个handler
                getNext().handle(request);
            }
        }
        else {
            System.out.println("无权访问, 程序执行结束");
        }
    }
}

class AHandler extends Handler {

    @Override
    public void handle(String request) {
        System.out.println("AHandler处理了请求 : " + request);
    }
}

class HandlerTest {
    public static void main(String[] args) {
        Handler authHandler = new AuthHandler();
        Handler aHandler = new AHandler();
        authHandler.setNext(aHandler);

        authHandler.handle("admin");
    }
}
应用场景
  1. Servlet Filter
  2. Nettty ChannelHandler
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
责任链模式是一种行为设计模式,它允许你将请求沿着处理者进行发送,直到其一个处理者能够处理它为止。以下是一个Java代码示例: 首先,我们需要定义一个处理器接口,该接口将由所有的具体处理器实现: ```java public interface Handler { void setNext(Handler handler); void handleRequest(Request request); } ``` 然后,我们可以定义一个具体的处理器类: ```java public class ConcreteHandler implements Handler { private Handler nextHandler; public void setNext(Handler handler) { this.nextHandler = handler; } public void handleRequest(Request request) { if (request.needsHandling()) { // 处理请求 } else { // 将请求传递给下一个处理器 nextHandler.handleRequest(request); } } } ``` 最后,我们可以创建一个请求类: ```java public class Request { private boolean needsHandling; public boolean needsHandling() { return needsHandling; } public void setNeedsHandling(boolean needsHandling) { this.needsHandling = needsHandling; } } ``` 现在,我们可以使用责任链模式来处理请求。首先,我们需要创建所有的处理器对象: ```java Handler handler1 = new ConcreteHandler(); Handler handler2 = new ConcreteHandler(); ``` 然后,我们需要将处理器对象接在一起,以形成一个处理器: ```java handler1.setNext(handler2); ``` 最后,我们可以使用处理器来处理请求: ```java Request request = new Request(); request.setNeedsHandling(true); handler1.handleRequest(request); ``` 在这个例子,我们将请求传递给第一个处理器。如果第一个处理器无法处理请求,它将把请求传递给第二个处理器。如果第二个处理器也无法处理请求,则请求不会被处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值