设计模式之责任链模式

Java33

本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍责任链模式在我们常用的框架中的运用,最后是责任链模式的优缺点和应用场景。

一、引出问题

小王为老王建了一个图书馆管理系统。随着访问量的不断增加,老王要求进行更多的用户名核查。

[En]

Xiao Wang built a library management system for Lao Wang. With the continuous increase in the number of visitors, Lao Wang asked for more user name checking.

小王准备在用户名判断语句之后添加密码检查语句。老王连忙拦住了想继续换码的小王。如果您稍后添加角色检查和权限检查,您将编写多少条判断语句?

[En]

Xiao Wang is going to add a password check statement after the user name judgment statement. Lao Wang hurriedly stopped Xiao Wang who wanted to continue to change the code. If you add role check and permission check later, how many judgment statements are you going to write?

而且你把软件设计原则中的——开闭原则丢到哪里去了。

可以考虑使用一种模式,将所有的检查方法分离到一个类中,每个类只负责处理自己的检查逻辑,将当前的检查类传递给下一个检查类进行处理,这样每次添加新的逻辑判断时,只需要添加一个检查类。

[En]

You can consider using a mode in which all the check methods are separated into a class, each class is only responsible for dealing with its own check logic, and the current check class is passed to the next check class for processing, so that each time you add a new logic judgment, you only need to add a check class.

就像是一条流水线,每个类负责处理线上的一个环节。

二、责任链模式的概念和使用

实际上,老王提出来的正是行为型设计模式中的——** 责任链模式

顾名思义,责任链模式将每个责任的步骤串联在一起,在执行下一步之前完成一个步骤。

[En]

The chain of responsibility pattern, as its name suggests, concatenates the steps of each responsibility, and one step is completed before the next step can be performed.

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

Mybaits plus 数据库映射java实体三种方式

前言 数据库一般是用下划线进行设计字段,Java实体一般用驼峰法设计属性。这是不成文的规定。当数据库字段映射java实体会出现问题。下面分别是数据库字段和实体属性。 解决问题三种方式 1.利用mysq...
Java

IntelliJ IDEA中如何优雅的调试Java Stream操作

Stream操作是Java 8推出的一大亮点!虽然 java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为str...
Java

运算符 (Java)

基本介绍 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符: 实例展示 ``` public class Operator { //base.Operator 运&...
Java

使用 CompeletedFuture 实现异步调用

在我们平时写的项目中,异步调用是一个比较重要的优化手段,在 Java 中,提供了 CompletedFuture 供我们使用,具体实现如下: 例子 如果现在有需求,我需要去淘宝、天猫和京东搜索某种商品...
Java

CompletableFuture的入门

runAsync 和 supplyAsync runAsync接受一个Runable的实现,无返回值 CompletableFuture.runAsync(()->System.out.prin...
Java

JAVA多线程实战

由于项目上要和其他系统交互,而该系统采用同步接口,我们采用单线程调用,接收一条数据平均需要4~6s。而我们需要汇总近三个月的订单信息,大约一次有几千条数据,所以进行一次交互大概需要几百分钟。经过沟通后...
Java

java集合框架

转载:https://www.cnblogs.com/yangliguo/p/7476788.html 部分修改自其它博主,地址找不到了,望见谅! 集合 集合与数组 数组(可以存储基本数据类型)是用来...
Java

Java 15 新特性:隐藏类

什么是隐藏类 隐藏类是不能由其他类直接使用的类。引入隐藏类的主要目的是供框架使用,以便框架可以在运行时生成类,并通过反射间接使用它们。这可能有点抽象,不要紧,让我们用一个例子直观地理解它![En]A ...
Java

聊一聊过滤器与拦截器

过滤器 Filter 面试官:用过过滤器吧,介绍一下过滤器。 John同学(心中窃喜):用过,我经常用它来净化水 😁... 面试官:今天的面试到此结束,回去等通知吧。 John同学:🙃... Filt...
Java

Java(2)数据类型与变量

前言 Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种...