00:00
啊。啊,咱们今天下午啊,学习这个模板模式啊,在学习这个模板模式这个之前啊,我要复习一个这个挺重要的知识点啊,与我们一会儿这个模板模式有关啊叫做什么呢?叫做我们这个serve这个啊家族的继承结构。好,我们现在啊,先来一张图啊。好,排在我们最顶上的呢。它是一个接口,那这个接口呢,就叫什么。对吧,好。这是一层啊,这个逐渐递进的啊,这个继承关系啊。啊,首先我们最上边的这是一个接口啊serve star好,那么谁实现了这个starlight接口呢?
01:09
HTTP还没到它呢,Gene。还隔个他OK吧,其实以前做开发的都用过这个啊generate s,因为以前来讲这个HTTPS还不成熟,OK吧,好,紧接下来啊,才是我们的什么呀,最熟悉的,每天都在使用的。HTTPOK了,最后的最后是我们自己的,比如说我来个MAN01,这是我自己的对吧。啊这类啊,它实现了这个接口啊,So接口啊,这是一层一层实现的这么一个关系啊好httv so呢。继承了,So,然后最后我们自己的。
02:03
啊,继承了HTP,从我们开发来看。是不是这一步是我们最熟悉的对吧?哎,就是继承了这个htp s OK吧,好,为什么我画的一个比较大呢,同学们为什么。这个大这东西大,它说明什么呢?它说明它功能多,对越是父类它越抽象对吧,越是子类呢,它越具体对吧?好,越是子类它功能越强大啊,所以说最后到我们自己的这个so啊,肯定让我们自己的完善成什么呢?啊,我们自己想要的这个啊的形式对吧?好那么大家注意啊,老师要说一句话啊,大家品味一下啊,也就是说我们之所以啊,我们下边的所有的serve net啊,能够拥有在服务器端的接收并处理。浏览器发出请求的这么一个功能,也就是说我们具有功能啊,其实呢,完全得益于什么呢。
03:06
我们是什么呢?哎,实现了sorry的接口,能理解吧,你要不实现这个接口啥也干不了,OK吧,那对于刚才那一句话,我说完之后,如果我这么说,如果我们的MA01跨过这几项直接的。实现这个接口,我这个MY01。能用吗?能用啊,我刚才那句话不能白说呀,我说了只要你实现这个接口就好使啊。OK吧,包括我们自己的这个大家注意啊,只要实现了这个就好使。OK吧,只要时间哪就好使啊,好,我们现在来看一看啊,来看一看。嗯,在这里边儿,咱们再新来一个啊。
04:00
该005了是吧。好,test5.gp啊。外边插苗,咱们先来一个SO5。啊。这个我我把它去去啊,这些东西暂时咱们先不用了啊。好。这两样东西都关掉。好,也就是说啊,这是我自己的对吧?好,我来一个implement啊,实现一个接口,这个接口叫做。对吧,好,那么我们需要这个重写一些方法,那这个方法呢,咱们需要重写123451共有五个对吧,那其中啊,大家注意啊,其中咱们这个service方法它有用,这个方法就相当于是什么呢。
05:13
我们之前使用的那个do get和do post方法,那这个方法啥意思?是相当于是接收并处理请求的这么一个方法。对吧,好,这个方法啊,这个方法也就是说啊,如果我们现在做一个实验来讲的话,诶,我在这个方法里边,就当这个毒干毒泡S来使用也行,没有问题,OK吧,也可以啊好,那么除了它之外啊,咱们来看一看啊,继承extend,咱们这个HTTP这个叫什么GE generate是不是也行啊对不对,好来。在这里边儿,咱们只重写一个方法就行了,那另外那四个呢,同学们。
06:00
另外那四个呢,不用重写了,说明已经被他重写过了,对吧?好,那么我们做的是什么呢?Extend谁呢?HTTP所有方法都不用重写。就说明什么呢?所有的方法在我们HTTP里边都已经重写完毕了,对不对,我现在就一个问题啊,我现在啊继承了HTTP,我有do get的方法,我有do post方法,对吧,我有没有刚才我们看到的那个service方法有没有。有吧,为什么?哎,它是谁的方法,它是我们上面代的方法对不对,一层一层的是不是继承下来了对吧?好,但是呢,我们在这里边啊,不用重写,已经由HTTPS帮我们写好了,是这样吗?好所以说啊,它有啊serv SE啊其他其实啊是有这个方法的,OK吧,好,但是这个方法大家注意啊,但是这个方法对于我们来讲的话。
07:06
它不区分什么呢?它不区分我们get请求还是post请求,OK吧,也就是说我们不写do get do post,直接用这个方法也能接受并处理请求,OK吧,好,那么我们现在啊,通过一张图来看啊,其实这个方法啊,我们以前用do盖的do p的时候忽略掉它了啊,其实它是有用的啊好,我们来看一张图。我现在画,比如说三个方法啊。好,这个方法叫做service方法,这个方法叫做do get,下面这个叫做。啊,方法OK吧,当我浏览器。发出了一个请求到后台资源发送到store net来接收并处理请求,那之前我们看到的结果,从浏览器请求一过来,要么走读get直接伸到它,对不对,要么走谁。
08:07
Post,是这样吧,要么走他,要么走他OK吧,那其实我们不知道那是什么呢,他其实先走谁呀。他其实一定要先走咱这个service OK吧,先走service,那这个service啊,我们不用重写,被HTTP给我们重写好了,OK吧,好重写它有什么功能呢?我这个方法它就像是一个中转站一样,它会去对我们HTTP协议的请求方式进行一个最基础的判断,如果你发出的请求方式是get请求方式,它会把这个请求转发到哪呢?读盖的方法,所以说我们才会看到一种效果是什么呢?从浏览器发出一个请求,就直接就干到这儿了,OK吧,这是我们看到的效果,OK吧,那其实是先过它,它自动帮我们转发到这个do get OK吧,那如果你是一个请求,那很明显了。
09:02
那肯定就走一个这个do post方法了,是这样吧,好,那现在我可不可以这么认为啊,同学们啊。我现在这个请求啊,从浏览器发送到服务器,也就是访问到后台资源,我一定要先走service方法可以这么理解。可以吧,好,那么第二个如果我这个do get和do post我不用了。不用了,不用了以后呢,我就直接请求,我不管你是get请求还是post请求,我一律使用service方法来处理,可以不?可以吗?没啥问题吧?没什么问题吧,对吧,我我管你是get还是post。以前为什么分成do get和post?
10:00
因为两个方法方便管理,诶这个方法啊,处理do干的方法归一堆,那个do pose方法处理pose请求归一堆,是这样吗?就分开来讲的话说方便管理,我现在就问你们,我现在就我就不分了,直接一个请求过来,哎,我就走services我就来处理了,可以吧,完全可以啊,没有问题啊,OK吧,好,这是啊,咱们复习的其中的一个知识点啊,这个知识点咱们一会要用的,OK吧,好,那接下来我们回过头来啊,来看一看我们的这个模板模式啊。好模板模式啊。模板模式是我们G23种设计模式的其中一种啊好,那么它的功能是。是啊,将什么呢?教我们程序执行的这个啊,大体上的这个流程啊,或者是什么呢?这个,或者咱们算法啊这个啊,算法的这个啊骨架给它搭建出来。
11:11
好,里面。具体的实现方式啊,我们交给这个啊,方法去做,方法去做。啊,叫做这个模板模式啊,这说白了就是什么呢?我把这个啊架子给搭起来,搭建一个模板OK吧,但是具体的这个行为具体怎么做。我往这个模板里边搭,实在是代码太多了,我交给一个一个的方法去实现,OK吧,其实从这个定义定起来啊,啊不是那么好理解,有点晦涩,OK吧,一会儿啊,咱们再处理一个实际项目开发问题的时候啊,马上就知道了怎么回事了,OK吧,好呃,他最中心中心的这个思想啊,就是打股架,OK吧,但是具体实现他不做OK吧,好,我们现在啊,就来这样的一个操作,那现在呢,老师在这个test5.gsp里边啊,要写一套增删改查crud,增删改查OK了,那大家现在想一想。
12:19
那对于我这个JSP发出的这个增删改查的这个请求,我们之前的操作应该有几个store来对这个增删改查进行处理?四个吧啊,如果要较真的话,可能修改是两个对不对,一个是跳转到修改页,有一个根据ID取单条,那么一个操作对吧,还有一个真正执行修改槽是五个对吧?好,我们现在假设就四个啊,增删改查啊,这个好计算一些啊。好,例如啊。啊,例如我们现在要写一个啊学生信息管理系统OK吧,好,那么学生信息管理系统啊,学生信息管理系统中那百分百有什么。
13:14
他肯定有什么呢,学生模块吧,对不对,好,那对于这个学生模块。我靠。基本的这个啊,增删改查的操作啊,我们是需要几个同学们。是不是四个这个对不对。四个OK吧,它们分别是。分别是啥呢?比如说咱们来个student student先写模块名,再写功能名,功能是添加save或者是insert都可以,OK吧,啊来,当然你们咱们后期啊,肯定叫。
14:05
可郑老师对不对,好,暂时咱们叫这个啊。还有student是吧?Update以及student。Delete对吧,以及还有查询啊,比如说叫啊。Select。OK吧,这是四个,那四个store that我们以前在做这些操作的时候感觉很正常对吧,诶一个so是负责处理什么呢,我们其中的一个请求是这样吧,好。一个so that啊,负责。处理。一个请求啊,或者说是一个需求,OK吧啊,做一个标注啊,一个需求,好,那么同学们有没有想过啊,那未来的实际项目开发中啊,我们不仅仅只有一个模块啊。
15:19
只有一个模块。而且呢?而且模块中。也不仅仅只有增删改查的操作呀。那对于我们现在来讲,就是正在查对不对,将来是咱咱咱咱们的需求可多了。OK吗?需求特别多,一个需求就相当于一个请求,OK吗?好,而且模块也不仅仅只有一个模块,咱比如说现在拿一个学生信息管理系统来举例,你想一想,除了学生这个模块,那咱们还可以有什么模块啊,同学们。
16:07
那比如说再来一个,哎呀,这可多了,比如说教师模块行吗。教师模块教师模块说吧,增删改啥几个时来。四个对吧。好替换成teacher对吧。好四个三奶正大也差,那还有呢,你这东西可多了啊,比如说课程模块行吗?课程模块。课程course course对吧。
17:03
行,我现在啊,仅仅只是三个模块,而且每一个模块只有增删改查对吧,我现在写了几个三呢。呃,以上啊,加在一起啊。一起我们使用了啊,12个是这样吗?好,这现在仅仅只是举了一个例子。OK吧,那以后实际项目开发中,比如说啊,我作为一个啊,作为一个,比如说咱还不说很大的项目,咱们比如说就说一个这个啊中等的这个项目,我现在假设啊有这个一共是十个模块,假设OK吧,这十个模块呢,每一个模块项有我往少点说啊。20个需求吧,那假设行吧,啊,这其实很少了啊,啊,那你想一想,我们一共应该创建几个所。
18:02
那得有200个呗,20乘以十嘛,对不对,200个加瓦类。没别的,每一个SOLA就是为了处理一个请求,是这样吗?你想一想,咱们以后项目中的这个体积是不是会非常的庞大,非常的臃肿啊,是这样吧,以后咱们肯定不是这么玩的啊,好,我们未来的实际项目开发中啊,好,那么大家注意啊。对于so light的创建啊。的创建啊是什么呢?是。按照这个模块划分的好,说白了就是什么呢,一个模块有。一个统一的。二代来处理OK吧,好,例如啊。
19:01
例如上述需求。好,我们一共有学生。教师,还有什么课程三个模块是这样吧,模块啊,我们就应该使用什么呢,几个so尔来处理啊。哎,三个来处理啊,诶啊来处理OK吧,好,现在啊来模拟一下这个例子啊好。啊,画的稍微像点啊,比如说哪个什么学生信息管理系统是吧。嗯,来超链接吧,超链接或者是按钮都行啊A。
20:10
比如说这个叫添加操作,修改操作,删除操作,最后查询操作啊好添加操作,咱们来一个student这个模块下的是吧。这有点度行吗?啊,下边按照这个套路来写啊。好,这个咱们来一个update,然后再来一个delete,最后来一个select。行吧,好,那大家注意啊,我们现在啊这四个超链接好,我现在配的这个什么呢?我是不就配了一个这个5.do啊对不对,好现在啊,我把它做一做这个修改,我现在想要的这种结果,是不是要让我这四个请求,这四个超链接所走的后台资源统一是咱们这个MASTER05啊。
21:07
OK吧,也就是说啊,这四个操作啊,这四个操作统一由后台的MY05这个资源来做处理,OK吧,好,那么我们现在啊,You来配一下,好student,好,咱们来一个这什么点two对不对,这是我们之前的处理,如果你再来一个after.to你是不是还得写一个S对吧?好,但是现在呢,我们是不是可以同时写多个。You are our partner。来看看啊,来个什么。Update,再来个什么delete,然后再来好,我现在啊,只要是访问的这个路径走谁是不是走他呀,那访问这个路径是不是也走他呀。
22:03
对吧,好,也就是说啊,咱们可以同时为他配置。多个为一个后端的这个资源,同时分配多个路径都能够访问到,正所谓同一个资源多个入口都可以,你访问这些路径都能访问到它可以吧,好,那么现在在我这个MA05里边,咱们是不是就不应该再做?Get请求和post请求的区分了。因为查询是get,其他添加修改删除是post,是这样吧,所以说我现在啊,暂时这些个get post我先不管,总之我现在知道的是什么呢?这四个请求啊,同意都要由我这个sorry来处理,是这样吗?所以说在这里边咱没有必要读get,读post什么方法就行了。是刚才咱们讲了一个这个service方法啊,同学们对不对,好,那现在啊,这四个请求过来统一走这个service方法OK吧,但是现在这个问题又来了。
23:08
我现在我怎么知道我处理的到底是哪一个请求啊。是添加请求还是修改请求,我怎么知道?我们是不是得通过这个路径来判断呢?好,咱们来一个pass或者叫URL都行,OK吧,其实你取得这个路径的方式有很多啊,Store net里边给你提供了很多这个方法,OK吧,好。我们用了一个叫什么呢,这叫IQ是吧,我给他补全了啊。好,我们来个request.get什么呢?Serve let pass,这个用的是最多的啊,这个主要是取得什么呢?取得去掉杠项目名后的这个访问路径,说白了这个东西啊,如果你访问的是后端资源,你可以把它当做什么呢?取得我们的URL。
24:07
看到没,所以说你取的就是什么呀,就是这些东西看到没。谁访问的,去的就是谁。OK吧,好,我们通过判断它啊,通过判断它,好对于它的这个判断啊,咱们来if l if不行啊,或者咱们这个Switch都行,但是还是if l if用的稍微多一点,OK吧,Switch以后实际项目开发啊,说句实话。用的很少,OK吧,好,我们现在来判断一下啊,如果咱们student student下面的点do点什么呢。ES,咱们的这个pass,那说明在这个if语句块当中,我们要处理添加操作没问题吧,非常简单啊,咱们来一个。衣好,咱们一共得写四个对吧?行,我把这个先给铺上啊。
25:06
来update,再来什么delete,最后来一个。C that OK吧,好,那在这里边咱们就得,所以就得写这个添加呀,在这里边写上啊。修改这里边儿写删除,最后这里边写什么查询。OK吧,好,但是你现在可以思考这个问题,我们现在算是把这个啊,整个这个程序执行这个流程啊,这个股价给他打出来了,对不对,但是你想一想,我在这里边是不是得跟数据库做交互啊。你生产改查,他肯定得这个做倒层跟跟数据库做交互,对吧,你直接在这里边写的话,咱们这个业务是不是有可能会很复杂,老师这业务一点都不复杂。啊,不就增删改查吗?将来有复杂的业务,这个你放心OK吧,说白了就是这里边如果咱们填写的代码过多的话,你想一想咱们这个if l if这个在线是不是拉的太长了。
26:06
使得我们代码整体的这个结构啊,诶得到了一个啊,最长的这么个拉伸,对不对,将来它第一不符合我们敲代码的一个特性叫什么呢?可读性是这样吧,你看这个if,你再找下一个艾兹if,你找老半天了。是这样吗?而且你在看第三个I if的时候,诶,上边两个都是啥来着。可读性,那我代码还不具有什么呢?可复用性,什么叫可复用性?如果我在这个if里边所写的代码,我在这个I if里边又用到了,你是不是得写两遍呢?好,最后一个它不具有可维护性,可维护性啊是我们将来开发当中啊最重要的一个特性,OK吧,那可维护性指的是什么呢?我们尽量的去方便对于代码啊进行一个修改,或者说是改改造OK吧这些东西叫做维护OK吧啊这个理念啊,咱们将来再说OK吧不急啊,对于我们现在来讲啊,可复用性以及可读性啊是很重要的,OK吧,好,那所以说我们不能这么写啊。
27:18
好,回过头来我们再来看一看我们这个模板模式的这个理念啊。所谓这个模板模式啊,它的功能是将程序执行的流程,或者是这个算法结构的这个骨架给搭建出来,咱们现在算是把增删改茶的骨架给搭建出来了,是这样吗?好,但是里边具体的实现怎么做?哎,教给方法去做,是这样吧,哎,也就是说啊,我们在这儿啊,不在这里边硬写啊,调个方法,让方法去做,OK吧,好有效的解决可读性和可服用性啊。啊,你封装成一个方法是最方便的,OK吧,好比如说我现在来一个什么方法。
28:02
废物方法可以吧,同学。哎,我调这个save方法去做,OK吧。没事啊,这个save,他有点这个小问题啊看看。上边给引了一个什么玩意儿,什么玩意儿啊,不看它啊。啊,我们来我们自己的啊,这块我自己写一个idea,有些时候给你的这个提示就是这样的啊。好,我在下边写一个自己的这个这个方法OK吧,Public convoy。Save,我是不是在这个方法里边实现咱们这个添加操作对吧。哎,你看由方法去实现多好,方法去实现好处是什么?可读性是不是增强了,以后我要看添加的话,诶,啊,我从这个结构看到添加,我是不看这个方法就行了。对吧,这方法不干别的就做添加对吧?好,而且呢,它还具有可服用性,你在哪块做添加,我就在哪块调save。
29:08
没错吧,好,那大家现在思考这么一个问题啊。我现在这个save既然做的是添加,首先我是不是得把表单中的参数都拿到。怎么拿参数?今天上午还说request get parameter。对吧,那我这里面有没有request。没有,很尴尬呀。怎么办啊,哎,是不是往里传就行了,对不对,这里边有对吧,往方法里传re ET以及什么response用不用传,必须得传呢,对吧,咱们得想应啊对不对?好,这回你再看看这个save方法,同学们啊,你就回再看看这个save,它是不是就相当于我们之前那do get do post。
30:00
OK吧,好,直接往这里边写东西就行了,OK吧,那如果按照我们这么理解,那下边咱们是不是一个一个调这个方法就行了,对吧?好,这个应该是。然后这个呢。De delete,然后这个咱们再来一个C。行,这个一个一个来。啊,Delete这个bug没修复啊。这个得手写一下啊,包括咱们那个save不填参数的啊。因为idea有它自己的这个识别方式啊,Select应该没有问题啊,好来我们在这里边来,这个叫执行查询操作,是这样吗?好。上班。
31:04
好,进入到学生模块相关的操作,好执行查询操作,然后再我们下边来。Delete这个执行。删除操作在下边这个我们执行。修改操作啊,最后一个咱们执行的是。添加操作对吧,蒸删奶茶全了,现在我来访问一下这个太45GP啊。来试试看啊。好T啊。
我来说两句