00:01
好,我们继续啊。首先呢啊,刚才那个录了一半的时候,他突然自己停止了,然后重新录了,重新录一下啊,然后今天我们介绍呢,是设计模式当中的策略模式。然后在业务开发中,登录接口是一个非常常见的场景,随着业务的发展,需要支持多种登录形式,那么针对登录接口该如何书写,如何设计接口符合?面对大量EL如何进行优化,然后我们就是对着带着这个场景去走进我们这个策略模式。嗯,首先说一下这个登录场景,登录场景比如说我们正常。啊,正常的这个登录方式都是用户名密码登录对吧,但是随着这个APP啊,或者是外部它这里需要他可能支持手机的验证码登录啊。有很多的这个。登录登录方式。
01:01
那么先看一下这个策略模式的一个定义。策略模式。他说,该设计模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换。并且算法的变化不会影响使用算法的客户,策略模式属于对象行为模式,它通过对算法进行封窗,使算法的责任和实现分割开来。那么大概的意思啊,它比较。介绍的比较官方,属于百科的这种,我操了一下百科的定义,那对于我们这个开发当中呢,就是说你定义了一个方法或者是接口,对吧,一个登录场景的一个方法和接口,它的实现呢,跟方法肯定是分开的,比如你登录方法可能有N个对吧。那么实现也对,对应的实现也有N格。也就是说你。调用的时候呢,你不关心它那个实现是怎么实现的。你只关心这个登录方法该怎么调用,然后实现呢,是由内部去把它分开来,然后根据不同的场景去调用不同的时间,对吧。
02:08
那我们比如说嗯,打开我们这个保赛啊,做一个刚才已经写过了,我们重新重新画一下。有个登录流流程对吧。都流程吧,这个动作流程啊。往下拖一下。正常我们的肯定登录流程,有时候进入一个软件啊,有一个登录页面,输入用户名密码,正确成登录成功对吧,也是个正常的登录流程,就是这么简单。那么我们为了好看一点。我们写在这个位置,就是把这个输入用户名密码这个东西。放到上面来。那么正常,比如说我们那个登录方式都有什么。呃,账号密码对吧。
03:00
账号密码。还有刚才我们说的对吧,验证码啊。那么还支持。指纹识别。那我们支持指纹识别了,对吧,还肯定支持面部识别。还有我们常用的。微信登录。那我们既然支持微信了,那我们肯定正常的也都支持支付宝登录,对吧。就我们大概主流的这个几种登录方式啊,六种登录方式对吧。我就是说不算其他的。有一些对吧,像电商的一些页面,它也支持不不需要登录也能进去看一些东西,对吧,也能有点东一些东西,但是。最终还是要实现登录的。
04:03
什么好看不好看的人,那就是画成这样好吧,大概就是这么一个登录啊,它有六种。我拿了。这样的好看一点啊,好是这样。他既然有六种登录方式,那我们第一次开始写的只有一种,对吧,那么随着这个业务的这个种类越来越多,我们肯定会增加各种这个不同的实现。那我们正常是怎么写的呢?对吧,我们正常把这个。先新建一个项目啊,Spring IO下面一个项目啊,加入加入语言默认版本。然后新建一个像明星的就叫。Spring boot DEMO。
05:01
然后呃,JK我这里自己。安装的是GDP,版本是11,然后增加了一下它的简单的一些依赖。然后直接点生成就可以了。后续的有一些什么依赖呢?我们再重重新从那个po文件里边。到后天来好吧。先介绍一下这个项目呢,大概拿下来之后呢,就是这个样子啊,没有一些什么其他的特别的一些东西,项目简单先看一下。就是他。所有的东西啊。传出了从到成设备没有什么MVC的一个简单的一些模式。首先先看一下,它有两个接口入口。一个是登录的入口,一个是新增用户的入口啊。登录的时候呢,需要输入用户名密码,然后判断一下登录类型。然后如果你的登录方式是第一种,那我认为你是账号用账户密码。
06:04
登录,如果是第二呢呢是验证码登录,以此类推,对吧。那么如果我们按照这种方式,可能有3456对吧。就不说了是吧。然后呢,我们重新运行一下这个项目。然后登录手机调线接口试一下。假设我们现在是用户名密码登录方式是一。啊,掉了一下,他说当前登录方式是账户密码登录用户名是什么,密码是什么对吧。那么他这种方式有什么缺点呢?就是说。假设我们这个账号密码,它自己本身每个每种登录方式都有不同的实现以及业务流程。你可能需要存一下当前的登录的用户名密码,以以到这个下一次登录的时候。他不需要再重新输入了,如果说验证码在有效期内呢,他也不需要重新发送了,对吧,我们毕竟发短信需要要钱的。
07:09
还有一些所有的其他的一些业务,比如说上下游的一些招交互,对吧,可能一一个业务的实现方式就有很多行代码,很多种业务逻辑,那我们都融于到一块呢,可能不太好。即便是你把它分开成。封装成每一个方法之后,它也需要调很多个方法。啊,所以我们需要用一个策略模式,策略模式去。那么也就是说我们策略模式在实现之前呢,不需要实现它这个。关心他的这个实现是怎么样的。那我们就,嗯,就新建一个。推荐一个配置类。就要一个。嗯。登录的。
08:02
对。登录的一个策略,登录的一个策略对吧。那我们先上来对吧,他这个。首先把这个接口拿过来。只能把这头拿过来,然后呢,生成一个。啊,还根据针对于针对于这个。Service啊,生成一个,生成一个那个。赛的方法对吧。下场吧,给你开。然后。他传的是什么?其实传的也是捞对吧,直接把它拿过来就可以了。然后这个管理的这个类呢,就是说每次我可以实现set的时候呢。调用的这个service啊,到底它在了哪一个,以至于实现类的时候呢,就相当于去调用哪个实现对吧。
09:25
我们本身这个log in service有一个log in方法啊,我们主要就是针对于这个。老个人。方法来做。实现。这个直接就拿过来是吧。然后它针对的就是用。它实现的就是老个。把野快去拿了。
10:00
啊。这样的话就是说。每次呢,比如说我们现在,嗯,不是写一个,不是写一个,这个不在我们那个实现类里面去写了,因为正常情况下,你不可能说在词项类里面再去调用这个是吧,再去调用它的那个service。那正常我们比如说我们写的一个方法啊,它呢有一个。我们现在有一个策略的管理类。你说如果。如果我们在这个一个语音登录的,登录的一个。接口对吧,当的一个类型等于一。如果它是第一种类型,那么我们就是login service等于什么呢?
11:03
等于它的一个登录的一个时间类对吧。可能等于一个登录的这个时间类,对吧。那么这种情况下,也就是说我们调用的时候呢,在我们的这个可以把这些这些对吧,放到什么位置,放到CTRL的层调用的实线类,当然了我们这个service就不是这个log in。呃,我们需要先起一个名字,然后再这里面再写成这种形式。啊,我们的这个T的形式对吧,然后如果等于二的话,就是另一种传另一种曲线类这样去调用,这样去调用对吧。这样需要需要当然是需要传餐的,大概就是这样一种方式,但是呢,有没有发现就是说。这个策略呢,是它在减少了这个我们这个代码的这个实现,不需要都写在一起了。
12:02
对吧,他实现了这个策略模式是是这样简单就可以实现了。但是我们回过头来发现什么?就是说我们在代码当中的这个if else还是少不了,还是少不了的,这个判断还是少不了的。对吧。
我来说两句