ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【面试题】筹划模式-责任链模式 [打印本页]

作者: 民工心事    时间: 2024-8-9 19:49
标题: 【面试题】筹划模式-责任链模式
前言

我们知道,筹划模式是面试时经常被问到的问题之一,这是由于筹划模式能够体现出代码筹划的美感,且在很多框架的底层也都会使用到各种筹划模式,所以对筹划模式的观察,就成了面试时的一个重点。
目前比较盛行的有23种筹划模式,但如果我们想全都记着,难度确实比较大,不外我们可以通过学习框架中常用的筹划模式,来提升自己的代码筹划本领和面试水平,比如常见的单例模式、工厂模式、代理模式、适配器模式、观察者模式和责任链模式等。本日这篇文章,老朱就来给大家讲讲责任链筹划模式,盼望本文可以让大家掌握一种常用的筹划模式。

责任链简历

在软件开发中,责任链模式常用于将复杂的业务逻辑拆分为多个小模块,每个模块负责处置处罚其中一部分逻辑,并将剩余的请求传递给下一个模块。这种筹划方式可以提高代码的可维护性和可扩展性,也可以更好地解耦各个模块之间的依赖。这么说估计大家会觉得很空洞,没有落地感,老朱先来给大家举两个案例。
比如我们很熟悉的电商网站,如果有一个订单处置处罚流程,一个订单可能必要颠末多个处置处罚器来举行处置处罚,包罗库存查抄、代价计算、优惠券使用等等。如果其中一个处置处罚器无法处置处罚该订单,则将请求传递给下一个处置处罚器,直到全部处置处罚器都处置处罚完成或有一个处置处罚器能够处置处罚该订单为止。

再比如线申请贷款的体系,体系必要根据用户的个人信息来决定是否批准贷款。我们可以将这个业务逻辑拆分为多个小模块,比方根据用户的光荣评级、收入、负债等信息来做出判定。这些模块可以构成一个责任链,每个模块都有机遇来处置处罚请求,如果一个模块无法处置处罚请求,它就会将请求传递给下一个模块。
另外我们Web中的Filter以及SpringMVC的Interceptor也都接纳了责任链筹划模式,其实只要你用心琢磨,就会发现很多业务场景中都可以使用该模式,接下来老朱就以申请放贷这个案例来给大家讲讲责任链模式的使用。
案例代码

首先我们来界说一个抽象的接口,代码如下:
  1. public interface LoanHandler {
  2.     //处理器核心处理业务
  3.     boolean approveLoan(LoanApplication application);
  4.     //指定下一个处理器
  5.     void setNextHandler(LoanHandler nextHandler);
  6. }
复制代码
接下来我们分别界说光荣评级处置处罚器、收入评估处置处罚器,代码分别如下:
  1. public class CreditRatingHandler implements LoanHandler {
  2.     private LoanHandler nextHandler;
  3.     public boolean approveLoan(LoanApplication application) {
  4.         if (application.getCreditRating() > 750) {
  5.             return true;
  6.         } else {
  7.             return nextHandler.approveLoan(application);
  8.         }
  9.     }
  10.     public void setNextHandler(LoanHandler nextHandler) {
  11.         this.nextHandler = nextHandler;
  12.     }
  13. }
  14. public class IncomeHandler implements LoanHandler {
  15.     private LoanHandler nextHandler;
  16.     public boolean approveLoan(LoanApplication application) {
  17.         if (application.getIncome() > 50000) {
  18.             return true;
  19.         } else {
  20.             return nextHandler.approveLoan(application);
  21.         }
  22.     }
  23.     public void setNextHandler(LoanHandler nextHandler) {
  24.         this.nextHandler = nextHandler;
  25.     }
  26. }
复制代码
在这个例子中,CreditRatingHandler会根据用户的光荣评级来判定是否批准贷款,如果光荣评级大于750,则批准贷款,否则将请求传递给下一个模块。
而IncomeHandler会根据用户的收入来判定是否批准贷款,如果收入大于50000,则批准贷款,否则将请求传递给下一个模块。每个模块都有一个可选的nextHandler参数,表现链上的下一个模块。
最后我们通过使用下面的代码来测试这个责任链:
  1. public static void main(String[] args) {
  2.     LoanApplication application = new LoanApplication("John Doe", 700, 40000, 10000);
  3.     LoanHandler handler1 = new CreditRatingHandler();
  4.     LoanHandler handler2 = new IncomeHandler();
  5.     handler1.setNextHandler(handler2);
  6.     if (handler1.approveLoan(application)) {
  7.         System.out.println("Loan approved.");
  8.     } else {
  9.         System.out.println("Loan denied.");
  10.     }
  11. }
复制代码
在这个例子中,我们只是使用了简单的输出语句来模仿处置处罚器的批准或拒绝操作。而在现实应用中,我们可能必要与外部体系举行交互,或者根据更复杂的业务逻辑举行判定。
小结

总之,责任链模式是一种非常机动和可扩展的筹划模式,在许多现实应用中都有广泛的应用代价。通过将多个处置处罚器链接在一起,并按照特定的顺序举行处置处罚,责任链模式可以帮助我们实现复杂的业务逻辑,提高体系的可维护性和可扩展性。


             Periodic Comet Swift-Tuttle
             Image Credit & Copyright: Gerald Rhemann
Aug. 8, 2024
Explanation: A Halley-type comet with an orbital period of about 133 years, Comet 109P/Swift-Tuttle is recognized as the parent of the annual Perseid Meteor Shower. The comet’s last visit to the inner Solar System was in 1992. Then, it did not become easily visible to the naked eye, but it did become bright enough to see from most locations with binoculars and small telescopes. This stunning color image of Swift-Tuttle’s greenish coma, long ion tail and dust tail was recorded using film on November 24, 1992. That was about 16 days after the large periodic comet’s closest approach to Earth. Comet Swift-Tuttle is expected to next make an impressive appearance in night skies in 2126. Meanwhile, dusty cometary debris left along the orbit of Swift-Tuttle will continue to be swept up creating planet Earth’s best-known July and August meteor shower.


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4