颍上人才网
颍上职场资讯
颍上面试技巧
正文:深入解析责任链设计模式:提升代码设计与面试能力的关键
深入解析责任链设计模式:提升代码设计与面试能力的关键
来源:网络整理2025-03-07

前言

我们知道,在面试时经常会问到关于设计模式的问题。这是因为设计模式可以体现出代码设计的美感,并且很多框架的底层也都会运用各种设计模式。所以,对设计模式的考察,就成为了面试时的一个重点。

目前流行的设计模式有 23 种。若想全都记住,难度较大。但我们可通过学习框架中常用的设计模式,提升自身代码设计能力和面试水平。例如单例模式、工厂模式、代理模式、适配器模式、观察者模式和责任链模式等较为常见。今天这篇文章,老朱要给大家讲讲责任链设计模式。希望通过本文,大家能够掌握一种常用的设计模式。

责任链简历

在软件开发过程中,责任链模式常常被用于把复杂的业务逻辑划分成多个小模块。每个小模块负责处理其中的一部分逻辑,然后把剩余的请求传递给下一个模块。这种设计方式具备提高代码可维护性以及可扩展性的作用,同时也能够更好地解除各个模块之间的依赖关系。这样说可能大家会觉得比较抽象,没有实际的感受,那老朱先来给大家列举两个具体的案例。

我们熟悉的电商网站,假设有一个订单处理流程。一个订单或许需要历经多个处理器去进行处理,这些处理器包含库存检查、价格计算、优惠券使用等。倘若其中一个处理器无法处理该订单,就会把请求传递给下一个处理器,直至所有处理器都处理完毕或者有一个处理器能够处理该订单为止。

比如申请贷款的系统,系统要依据用户的个人信息来确定是否批准贷款。我们能够把这个业务逻辑拆分成好些小模块,像依据用户的信用评级来做判断,依据用户的收入来做判断,依据用户的负债来做判断等。这些模块能够组成一个责任链,每个模块都有机会去处理请求,要是一个模块处理不了请求,就会把请求传递给下一个模块。

另外,我们的 Web 中的 Filter 以及 SpringMVC 的 Interceptor 都运用了责任链设计模式。其实,只要你用心去思考,就能够发现很多业务场景都可以使用这种模式。接下来,老朱就以申请放贷这个案例来给大家讲解责任链模式的使用。

案例代码

首先我们来定义一个抽象的接口,代码如下:

public interface LoanHandler {
    //处理器核心处理业务
    boolean approveLoan(LoanApplication application);
    //指定下一个处理器
    void setNextHandler(LoanHandler nextHandler);
}

接下来我们定义收入评估处理器,代码如下:

public class CreditRatingHandler implements LoanHandler {
    private LoanHandler nextHandler;
    public boolean approveLoan(LoanApplication application) {
        if (application.getCreditRating() > 750) {
            return true;
        } else {
            return nextHandler.approveLoan(application);
        }
    }
    public void setNextHandler(LoanHandler nextHandler) {
        this.nextHandler = nextHandler;
    }
}
public class IncomeHandler implements LoanHandler {
    private LoanHandler nextHandler;

java面试简答题_java面试流程图_java设计模式面试

public boolean approveLoan(LoanApplication application) { if (application.getIncome() > 50000) { return true; } else { return nextHandler.approveLoan(application); } } public void setNextHandler(LoanHandler nextHandler) { this.nextHandler = nextHandler; } }

在这个例子里,CreditRatingHandler 会依据用户的信用评级去判断是否给予贷款批准。若信用评级大于 750,就会批准贷款;倘若信用评级不大于 750,就会把请求传递给下一个模块。

IncomeHandler会依据用户的收入去判断是否批准贷款。若收入大于 50000 ,就会批准贷款。倘若收入不大于 50000 ,就会把请求传递给下一个模块。每个模块都拥有一个可选的 nextHandler 参数,此参数表示链上的下一个模块。

最后我们通过使用下面的代码来测试这个责任链:

public static void main(String[] args) {
    LoanApplication application = new LoanApplication("John Doe", 700, 40000, 10000);
    LoanHandler handler1 = new CreditRatingHandler();
    LoanHandler handler2 = new IncomeHandler();
    handler1.setNextHandler(handler2);
    if (handler1.approveLoan(application)) {
        System.out.println("Loan approved.");
    } else {
        System.out.println("Loan denied.");
    }
}

在这个例子里,我们仅运用了简单的输出语句去模拟处理器的批准或拒绝动作。然而在实际的应用当中,我们或许需要和外部系统展开交互,亦或是依据更繁杂的业务逻辑来进行判断。

小结

责任链模式是一种设计模式,它非常灵活且可扩展。在许多实际应用中,它都具有广泛的应用价值。通过把多个处理器链接起来,并且按照特定顺序进行处理,责任链模式能够帮助我们实现复杂的业务逻辑,还能提高系统的可维护性和可扩展性。

Periodic Comet Swift-Tuttle

温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-227278.html转载请注明,以上深入解析责任链设计模式:提升代码设计与面试能力的关键资讯信息来自颍上人才网(颍上地区最大的颍上人才网颍上人才网

 
 ©2003-2018 颍上人才网  
客服电话:  QQ: