首页 > 编程语言 >java 实现责任链模式

java 实现责任链模式

时间:2023-09-30 21:06:09浏览次数:32  
标签:ConcreteHandler java 请求 处理 request 模式 责任 Handler nextHandler


责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许你将请求沿着处理链传递,每个处理器(处理者)都有机会处理请求,直到请求被处理或到达处理链的末端。责任链模式通常包括以下角色:抽象处理者(Handler)、具体处理者(Concrete Handler)、客户端(Client)。

以下是一个简单的Java示例,演示如何实现责任链模式:

首先,定义抽象处理者接口 Handler,它包括一个处理请求的方法和一个设置下一个处理者的方法:

public interface Handler {
    void handleRequest(Request request);
    void setNextHandler(Handler nextHandler);
}

然后,创建具体处理者类 ConcreteHandler,实现 Handler 接口,并在 handleRequest 方法中处理请求。如果处理者能够处理请求,它将处理请求并返回;否则,它将请求传递给下一个处理者:

public class ConcreteHandler implements Handler {
    private Handler nextHandler;

    @Override
    public void handleRequest(Request request) {
        if (canHandle(request)) {
            System.out.println("Request handled by ConcreteHandler");
        } else if (nextHandler != null) {
            System.out.println("Request passed to next handler");
            nextHandler.handleRequest(request);
        } else {
            System.out.println("End of the chain, request not handled.");
        }
    }

    @Override
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    private boolean canHandle(Request request) {
        // 根据具体的条件判断是否能够处理请求
        return true;
    }
}

接下来,创建一个客户端类 Client,在客户端中构建责任链并向其添加具体处理者:

public class Client {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandler();
        Handler handler2 = new ConcreteHandler();
        Handler handler3 = new ConcreteHandler();

        handler1.setNextHandler(handler2);
        handler2.setNextHandler(handler3);

        Request request = new Request();
        handler1.handleRequest(request);
    }
}

在这个示例中,我们创建了三个具体处理者 ConcreteHandler,并通过调用 setNextHandler 方法构建了一个责任链。当客户端发出请求时,请求将沿着责任链传递,每个处理者都有机会处理请求,直到请求被处理或到达处理链的末端。

责任链模式通常用于处理请求的链式处理场景,例如请求过滤、日志记录、权限验证等。它使得处理请求的对象可以动态组合,增加或删除处理者,而不需要修改客户端代码。这提高了代码的可维护性和扩展性。


标签:ConcreteHandler,java,请求,处理,request,模式,责任,Handler,nextHandler
From: https://blog.51cto.com/u_13171517/7664955

相关文章

  • 无涯教程-JavaScript - SUBSTITUTE函数
    描述在文本字符串中用new_text替换old_text。语法SUBSTITUTE(text,old_text,new_text,[instance_num])争论Argument描述Required/OptionalTextThetextorthereferencetoacellcontainingtextforwhichyouwanttosubstitutecharacters.RequiredOld_t......
  • 保护模式下的存储管理
    分段段描述符32位模式下,\(2^{32}bits=4GB\),起始地址用\(32bits\)表示,偏移用\(20bits\)表示,一页大小是\(4KB\),\(2^{20}\times2^{12}=2^{32}\),表示内存空间的某个位置最少用\(52bits\),实际上用\(64bits\),段基地址32位+限长20位+访问权限8位+属性4位。P:存在位:=1表示装入内存,=0......
  • Android中OkHttp源码阅读二(责任链模式)
    AndroidOkHttp源码阅读详解一看OkHttp源码,发现OkHttp里面使用了责任链设计模式,所以才要学习责任链设计模式小节2最终会返回ResponseResponsegetResponseWithInterceptorChain()throwsIOException{//Buildafullstackofinterceptors.List<Interceptor>inte......
  • 软件设计模式系列之二十——备忘录模式
    备忘录模式是一种行为型设计模式,它允许我们在不暴露对象内部细节的情况下捕获和恢复对象的内部状态。这个模式非常有用,因为它可以帮助我们实现撤销、恢复和历史记录等功能。在本文中,我们将深入探讨备忘录模式的各个方面,包括定义、示例、结构、实现步骤、代码实现、典型应用场景、......
  • Java语言通过三种方法来实现队列
    队列关于作者作者介绍......
  • 无涯教程-JavaScript - RIGHT函数
    描述RIGHT函数根据您指定的字符数返回文本字符串中的最后一个或多个字符。RIGHTB根据您指定的字节数返回文本字符串中的最后一个或多个字符。RIGHT适用于使用单字节字符集(SBCS)的语言,而RIGHTB适用于使用双字节字符集(DBCS)的语言。您计算机上的默认语言设置会影响返回值,如......
  • java: 用百度API读取增值税发票信息
     /***encoding:utf-8*版权所有2023涂聚文有限公司*许可信息查看:https://github.com/Baidu-AIP/java-sdk/blob/master/src/main/java/com/baidu/aip/http/AipRequest.java*描述:*#Author:geovindu,GeovinDu涂聚文.*#IDE:IntelliJIDEA202......
  • Ftp基础(二):被动模式与主动模式
      Ftp即文件传输协议,说白了就是处理文件操作的。可能你还听说过Ftps、SFtp,简单说一下他们的区别吧Ftps:可以理解为Ftp+Ssl,Ftp与Ftps的关系就类似Http和Https的关系SFtp:可以理解为Ftp+SSH  总之,可以理解为Ftp就是明文传输,Ftps、SFtp采用了加密传输。    好了......
  • 随笔-责任链模式
    将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。abstractclassHandler{privateHandlernext;publicvoidsetNext(Handlernext){this.next=next;}public......
  • java面试点
    语法基础关键字:final:用于表示某个变量、方法或类是最终的,不能被修改或继承super:可用于调用父类的方法或者字段synchronized:用于指定多线程代码中的同步方法、变量或者代码块transient:修饰的字段不会被序列化const在C语言中是声明常量的关键字,在Java中可以使用publ......