- 热门职位
- 热门地点
- 地区招聘
前言
我们知道,在面试时经常会问到关于设计模式的问题。这是因为设计模式可以体现出代码设计的美感,并且很多框架的底层也都会运用各种设计模式。所以,对设计模式的考察,就成为了面试时的一个重点。
目前流行的设计模式有 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
小学语文名师分享:如何通过‘动’字提升学生智慧与成绩
小学著名的汉语老师 小学汉语老师de微信公共帐户 在广阔的书籍中,我会发 ...
浙江大学三位一体面试现场实况:家长考生雨中共同前行,感人瞬间令人动容
6月19日凌晨6:15,在雨雨雨的伴随着郑大学的“tripe”采访在Yuquan校园和Z ...
浙江大学三位一体初审入围分数变化分析:2024年首考入围分总体降低,理科生更友好
在智格大学的初步评论中,没有“一对一得分线”这样的事情。所谓的“一对一分数要求” ...
面试系统操作流程详解:考生信息核对、必答题抽取与试讲题目查看指南
再次登录后,输入面试系统的主页。每个候选人的访谈顺序是固定的,审查员的操作顺序也对应。 ...
香港大学硕士项目面试指南:形式与详细攻略全解析
许多学生需要参加香港大学硕士课程的录取面试。但是,根据香港大学的规定,并非所有硕士课程都 ...