00:00
整个这个项目的话呢,我们就讲完了啊,那这两个页面update customer。跟。Newcom这两个JSP的合并大家课后自己完成吧,基本上长得还是长得还是很像的,下面的话呢,我们来看一个扩展的功能。扩展什么呢?哎,我们主要来体会一下这个面向接口边长的。好处。设置一个DAO,然后呢,我在这个so里边,你看里边我教的所有方法是不是都是这个DAO的方法。但是我在这块我把这个时间内给写死了。那现在我们来存储和读取这个卡通的信息,我是不是在那买车库数据库里边。哎,我我也可以写一个基于XML文件的。我再说一遍啊,我也可以写一个基于XML文件的,比方说。
01:01
我这块写一个X3标文件,写在这个里边了。找。好了,这里边的话我们写几个人customer。然后我们写ID的话,我们写在这儿吧。等于,比方说1001。Name。Address。水晶。丢了一个phone。
02:03
13789007654。圆这是一个哈,呃,后边一个一个的话呢,我就不写了,我们这个存储是不是也可以基于这个X文件啊。然后呢,我们注意看。我们注意看,诶我现在的话呢,是照这个DAO写的,我这个DA音符是谁呀,是不是JDBC实现的呀,我再来实现一个版本了,我们只写一个添加。那看一下这个意思,就可以来写一个。这个实现类叫。卡马DAO。The STEM import。我直接实现这个接口。他可能DA注意你这个时候你不能去继承这个DA了吧,这个是不是基于什么的。
03:01
基于那个JDBC的呀,这没用,OK,下面的话呢,我来提供这个实线,我们以这个添加为D好了,我提供这个实现的话呢,我需要写什么呢。那我可能需要用倒脱节来写,然后加上一个节点进去保存,这个暂时我先不提供实现,我来写一句话。废物。那既然这样的话,那我每个都写一下吧。具体提供实限的话呢,我们在前面讲这个道播音的时候呢,我们都讲过现在。我每个里边写一句话,至于说具体提供实现的话,他现在可以在课后来实现,或者说我们要是有时间的话呢,我们可以来实现其其中的一两个功能,它都可以get。这么。This。
04:04
Update。再写一个。最大。好了,我这个写完之后的话呢,我如果想换成XL实现的话,我得怎么写呀,大家说我这个代码需要改多少。我是不是只需要去改这个sol里边的一行代码就可以了。看见了吗?写成哈X。XML音口是不是可以了?这就实现完了。这个就叫面向接口编程,你后边这个调这个方法是不是都是这个接口里边的。至于说你是怎么实现的,是面向谁实现的,我不关心。啊,我们跑一下大家看。
05:07
看是不是这个呀,来我说一个查询就是这个结果吗?我添加这个没有我发米。是不是这个结果。这个操作都是可以进行,但是我现在因为我这个里边没有什么,没有具体提供实现,所以说页面上看不着,但是这个实现的话呢,已经变成了这个XLXML版本的实现。哎,这就叫面向接口编程,好好看一下,在这个里边,在这。是这个什么实现呢?我前面那个类型是不是这个接口类型啊,至于说你后边这个实现是接DBC的,是哈的还是XL的还是其他的等等等等,我不关心,我只知道哦,我掉了这个接口的什么方法就可以。什么实现我不管。啊,这是我们讲的第一个层次,叫面向接口编程。
06:03
随便写吧。我们要深入体会一下面向接口编程是什么意思。深入理解。理解面向接口。编程。什么意思呢,在我们这个里边,我们看到。我如果想进行修改这个时限的话,我只需要修改22行,就22行就可以,我后边这么多实线,我是不是一行也不用改呀。这就叫面向接口编程,我们现在的话呢,正式的把这个给他提出来说。在类中。调用。接口的方法。
07:01
而不关心而不必。关心具体。的实现。这。将。有利于。代码的九。叫解除耦合使。程序。有更好的。可移植性。可移植性。和可扩展性。好了,具体我们画一个图,我们来说一下这个事儿咋回事呢?这么一回事。看着哈,我们这块的话呢,我们的确是有这样一个service ctrl c。
08:04
哎,我的确是有这样一个,So,然后呢,我搜的具体调用的是。叫DAO的他。至至于说时间是什么,我们不知道。我在这个整个这个程序里边叫的都是他,他向他进行。调用,至于说怎么实现的,我完全不知道,那现在的话,这个是不是有两个实现呢?一个是XL的,一个是GPBC的,我们看说GBC。这个是XML。Ino。好了,这是它的两个实线,这两个实线的话呢,应该是一个实线的关系。
09:07
虚线。好一个。哎,目前就是这么一个情况,那至于说哎,我用的是这个接口,但是哪个实现类并没有那么大的关系,你提供哪个时间类的话,我就是提供是面向接地。BC的或者是XML的,但是目前呢,目前呢,我们的程序还没有。那么的好,怎么的?我是不是还得去修改这个源代码呀。修改源代码还是挺让人不爽的,那我们能不能做到连源代码都不需要修改?我再说一遍啊,我想实现由接DBC到XML,由MYS口到XML文件的这个切换。我连。
10:09
源代码都不需要修改,我直接去改一个配置就可以了。你说老师,我什么都不用干,那扯淡。你肯定需要改,你肯定需要去改一个什么,改什么呢,对于一般的这个,呃。对于一般的这个非城区而言,你让他去改一个。比方说改一个属性文件,它是被改的,比方说我们这块,我们提供了一个啊,我们提供一个属性文件。这个Switch。点proper。你去改它,他肯定会改,我们写个time。等于ML或者是。Time等于DBC,就这样子就可以。
11:00
保存这个的。题怎么写来着?我怎么忘了?是。这样。哎。这个是接近BC,而你要是这样改的话,这个就是XML,你让他去改这个的话是不是。只要是一个稍微灵光一点人数,他是不是都会改呀。那你直接给他。然后的话呢,你要你要是改错了的话,他给你一个提示,刚改错了。所以说都可以改,你要这样写的话,这个代码的灵活性就。大多了,好了,现在我们就来看我们如何通过。属性文件的方式来修改,是基于XL的实现还是接地BC的实现?说一下需求哈,说我想通过这属性文件里边修改这样的一个配置以实现。它是基于买circle的,还是基于XL的,或者是说基于接DBC的,还是基于照过接的?
12:06
这么一个意思。那。怎么改呀?大家说我既然有这个XL这个属性文件呢,我得去读它吧。我什么时候能改,什么时候能读,我们要说一下,你要是改它的话,你肯定得对当前的项目来进行。重启这是肯定的是吧,你改这个项目需要重新加载一遍。这是必须的,好了,一个前提。第二个,我们在想。我什么时候读他呀。我要是把这个改了的话,我需要去改什么呀。说白了,我们是不是得改它呀。这写死就没戏了吧?你不能说老师我改这个,然后完了,我们利用IO流把22行后边这个结果变为那个什么,然后完了那样做,那样做的话,这个成本太高了,你通过L流去改这个,去改它这个不靠谱。
13:05
那怎么办呢?我们看一下这个具体的实现。看一下这具体的实现怎么实现啊,我们要求是哎,通过。动态。我们要求是动态。修改。Customer的存储。方式,那我们现在提供的,提供的实践的话呢,就是通过修改什么。通过修改。啊类路径下类。路。地下的。Time。Rob。文件的方式来。
14:00
实现具体怎么改呢?具体怎么改?看他说啊。这个值叫Switch pro。这样来。这个表示。对的。行吧。就这样吧,我这边写不了中文啊。你就这样吧,就是说哎,通过这样的方式。那你看这个意思的话呢,你能看懂了哈。你想通过这样的方式,这是一个什么文件呢?我是type of Switch。这块。把题目给他。去给他。下面我们就看如何来进行实现呢?
15:00
看吗,怎么改?我们这个思路啊,我们需要梳理一下。那首先的话呢,我们需要明确一件事,什么事呢?嗯,你在。他从里边把这个写许,这个事儿就不靠谱了。Control。C好明确一个啊一。美的东。不能。对。通过这样的方式。来,鞋子。这个实现类。这肯定是不行,想都不用想是吧,你要你要这么改的话,那就没得改。这个肯定是得干掉。那我不这么写的话,我怎么写呢?这是第一个我们需要说的。下一个第二个。
16:02
怎么办呢?你说不能写死,那怎么办呢?那就是说。需要。通过一个。类的一个方法来获取具体的实现。累的。对象啥意思呢,你看我直接六是不是不行啊,那我于是的话,那我也得获取啊,那我就通过。一种工厂模式来获取这个具体的实的对象是什么?就是这个意思,我通过一个,我通过一个类的一个方法来获取,于是呢。这么写,这么写,我们来新建一个。小factory。DAO百分之DAO点。Thank。
17:00
好了,我来写一个。我们这个比较简单,就叫哈。DAO。这里边儿呢,直接提供一个方法。说。花。他。Get卡通电,诶,我想返回一个卡通电,然后我return一个new,比方说卡通吗?DAO。怎么建低音?你去问。那你这么几个问题有什么区别?我们先拿过来,先改一下。怎么写呢?这样写这个工厂啊,这个工厂啊,一般情况下是一个单立的,所以说我们给它写成一个单体模式。大熊猫DAO。
18:00
Thankyou工厂一般而言是。站立的,然后呢。提供一个private。哈特,DAO。等于new他DAO。起来。工厂一般都是单利。写完好,回到。这个里边来。And the。Do。Fair get卡Du保存。所以说有啥区别呀,你你在这块你不还是得去改这个源码吗。那于是呢,我想不改变。不数不管法,怎么办呢?我想在这块根据一个值来确定我返回的是谁。
19:05
根据谁呢?Daddy。等于。我想根据它去改,那写吧,那根据它去改的话,我们无论是DAOJDBC还是XJDBC,应该只有一个实现类,于是的话呢,这么写。Private map。Voo。DOS版等于687。Map,我先在这个map里边先放一份dos.put一个叫JBT实现的new。DBC。
20:00
再放一个。报点。这叫XML。怎么呢?你。大。XML实现。这这放好了忘了,然后的话呢,我们这块我们说呀,我要返回一个,我怎么返回呢,我这个返回。DOS点。根据什么呀,根据T去返回。但问题是。你这个菜还是个?还是个什么呢,这个他还是个还是个空吧。空不行啊。在的。看看这个值啊,我得第一时间给它。治上怎么去治他呀?怎么去治他啊?诶,我在当前外部应用才启动的时候,我就把这个值置上,置为谁呀,置为。这个值或者这个值就可以了。那我如何在当前外围用差启动的时候把这个值读到,然后给他呀?
21:04
我们讲过一个什么。我们讲过一个so里边有一个可以配置的叫loud stuck up,还记得吗?啊,那个可以在当天用才启动的时候就。创建这个等位,于是的话呢,这个因它。下一步我们不做任何的这个配置,配置可以吗。啊,选中目标。不让。那我自个写吧。创建一个service来。今年又回来了。创建上无所谓的。好了,我要什么呢?我都不要。
22:05
我们知道我们可以用什么呀。我们可以用一米是吧。Ctrl shift o过来看。这个可以用,注意是这个方法啊,不要用底下那个。然后呢,哎,我首先我要去读取那个。呃,被路径下的那个什么呀,那个wi proper,那我首先要获取一个输入理由引。In等于。Get sufficient contacts get results as STEM。什么下边的。Web info。考拉。Base下边的什么呀,点proper。读到。读完之后呢,我整出这个property。
23:03
再看整个。Draw。Property。等于。New。然后pro.load。Input stream。搞定。有一场。对。好了。这可到之后的话呢,我干什么呢,我从中来获取这个T。这个菜谱啊。来吧,写一个吧,叫type等于properties。点get property。派办考到,然后我给这个工厂先给他附上。喀DAO factor。
24:00
点。Guide。That。哦,写错了,是type是吧。过了啊。That,我不需要get。回到这个里边来。What is that on。O。再回到我的。对的。就到这个里边来,怎么写呢?That time have这个值就附上了。那如果我们必须保证这个值是。有效的,最开始的时候我们会有默认值是什么?默认值叫DBC。负号无论什么时候的话呢,有一个值好了,我写完写完。跑起来看一看,现在这个是啥呀。
25:01
安排好。这不对。他说什么?这是又是一个,他说控制了一场query。我查的时候呢,我查不了。我们看看吧。为什么查不了啊?那这个DAO3的反应的是什么呀?那我于是呢?有一个问题没搞定是吧,什么问题啊,我还没有对这个进行配置。Ctrl shift o。配置一下,让他在第一时间背。启动。都赖他。Name。Com。
26:03
退吧。没有配什么。罗嘎达一。再来。目前这个值是。XML赛跑。是不是XL实现啊,哎,我点一下OK,我把它切换成。切换成。保存等一下。那重新加载了啊。还没有重新加载。因为我们这个文件的话呢,是在class下面,应该是重新加载的。
27:02
这是不是PPT实现?这样的话呢,你只需要哎,我修改这个配置文件,而且重新加载当前外部应用就可以了,这就是灵活性和扩展性,或者叫可移植性,或者叫充分的解耦。把这个流程的话呢,我们研究一下很有意思。过来。嗯。来一下万科怎么实现呢?我们首先呢,我们在外部的应用才启动的时候,我们找到它,哎,这里边呢,我配了一个so。这玩意拔掉。就是这么一个。后边不写了,后面后面。完成。
28:01
过来。好了,来,我们推这么一个策略,那这个策略特点是什么呀?那是不是这个longdown start up的这个值是一,所以说这个决定的当前web应用才启动的时候。当前。Web应用台。启动的时候。怎么样?被创建。并。有。The m容器调用起什么方法?In,方法吗in?方法这事我们知道,那好吧,看这方法干什么了,这个方法里边我们干了这样的一些事。
29:03
说是。我来看。读取。类路径下的,类路径下的。这个文件。这个。文件,然后呢。获取他的。Type属性值,然后。付给谁啊?不给了。Customer give factory。为什么?对,看属性吧,是不是干了这么几件事啊,这是它。干的事,嗯,我们具体写的话呢,我们不写了,我们直接把这几个步骤拿过来,比如说C过来,哎,这个方法里面看到事第一件事。
30:01
18。第二件事儿。第三件事儿。还好了,这样之后,这意味着什么呢?这意味着。我在后边我这个我这个他通factory这type数据有值了。哦,行。这是我们。最上边的第一步行了,这个搞定之后的话呢,我们来看第二步。第二步,第二步呢,我们看到我在这个surface里边,我需要用啊,我用什么呀,我需要来用这个。我需要来用这个do啊,那么好了,这个位里边的话呢,我们有这么一步拿过来。
31:03
为了好出名哈。做一个截图。保存。完成。好,这又是一个图。这个图告诉我们什么呀,这个图告诉我们这么一件事说。创建。创建。他。做十。然后呢,为谁呀,为。Mo Bao。属性。不值。是通过。通过什么呀,通过。Factory。
32:00
它的。什么方法,哎,它的get。哈,DAO。方法。完成的啊,告诉我们这么一步,那好了,这要是告诉我们这么一步的话呢,我们看一下具体他们长啥样吧。通过它完成了,于是的话呢,我们再点进来啥样啊,那是不是直接根据这个type来获取这个do啊,那于是的话呢,这两个应该发力器。这个拿过来就填完了,这么看。过来。哎,它根据它来获取的值。
33:03
好了,哎,它根据它的话呢,来获取的值,那根据这个获取值的话呢,我们看到一个什么呀,这边是不是有个T啊。此时的太。此时的菜已经在。这位。中被。赋值了吧?所以说整个这个流程的话,你就可以被正常的。穿起来了,这样的话呢,我们就可以实现这样的一个动态切换。这里边儿我们要体会到的。第一个面向接口编程。让那个程序具有充分的。可扩展性如何降低耦合度?我只需要知道这个方法是什么就可以,至至于说是如何实现的,是谁定义的,我不关心。第二个。程序的可配置性。我们以后的话呢,我们会接很多很多项目是吧,我们希望我们这个项目最强大的就是我按一个按钮。
34:06
我们这块不是按按钮啊,哎,我做我做一个配置的修改,那么它就可以给我实现另外一个样子,这是。
我来说两句