- 2024黄冈市公务员面试时间地点及注意事项公告(3-7)
- 《湖北省2024年度省市县乡考试录用公务员公告》有要求,经过笔试以及资格复审这两个环节后,现在要将
前言
我们知道,在面试时经常会问到关于设计模式的问题。这是因为设计模式可以体现出代码设计的美感,并且很多框架的底层也都会运用各种设计模式。所以,对设计模式的考察,就成为了面试时的一个重点。
目前流行的设计模式有 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;

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转载请注明,以上深入解析责任链设计模式:提升代码设计与面试能力的关键资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)