00:00
行,那这样的话呢,我们这个动漫包下涉及到的两套结构哈,一套呢是employ equipment设备和它的子类,呃,和它的实现类,然后employee和它的子类我们就彻底完成了,呃,整体上来说的话呢,这个难度不大,然后咱们接着往后来看,这个难度呢就上来了,嗯,下面呢,我们来完成一下,这叫service包当中两个非常重要的类,一个呢叫name list service,一个叫team service。嗯,首先我们来看一下这个叫name list service name list service,它的整个功能就是负责将我们data这个类当中的数据呢,封装到咱们的employ这个数组当中,同时呢,去提供相关的关于employee这个数组的方法。那employee这个员工当中呢,又会涉及到设备,那设备呢也得给大家集成过来,哎,是这样的一个功能,这里呢已经告诉我们在name list service当中提供了一个属性构造器,两个方法,就做这样的一些事情就可以了,那我们呢,就按照这个要求呢来去做一下,首先在咱们的service下去新建一个类。
01:09
Name list service,好,这个咱们现在是写项目的,所以咱们就按照这个项目的要求来了,啊通常呢,在这个类上面我们去加的都叫文档注释了。这个注释的信息,咱们前面讲ecl的时候给大家也说过了,嗯,然后这个类呢,是做什么用的,这个呢,通常咱们在这个类的上面呢,都要加这样的一个描述,这个大家在真正做项目的时候养成了一个习惯,咱们讲新课的时候呢,呃,上面我都写了一个多行注释,因为咱们是讲知识嘛,呃,现在呢,真实的项目了,我们就加上啊,这个呢,版本你也可以写个,比如说1.01个版本是吧,可以完整一点,那回头呢,我们去看这个类的时候呢,你往这光标一放,这里边的信息呢,就都可以都可以看得到,哎,就这个意思啊。好,在这一类当中,我们提供的这个结构。放到这边。哎,写一下。
02:03
首先这里面提到了private是employee的数组,Employees行,这呢是声明了一个这样的一个属性啊,嗯,这个我们导入一下,然后接下来提供构造器,构造器public的name list。哎,Service,行,这是一个构造器,然后把这两个方法呢,咱们也给它先都填上,嗯,下边一个方法叫get all employees,哎,Public的employee,这是一个数组,Get all。Employees。行,目前呢,这里边我们先暂时给大家个no,然后再接着叫public,嗯,这呢是返回具体的某一个ID对应的这个employee。那这呢,暂时也咱们先return一个no啊行先放到这儿,然后接下来的话呢,我们就这个主要呢,就完成这个name list这个结构了,首先呢,这有个属性,这个属性呢下边构造器,然后我们看这里边这个描述,说这employees呢,它就是来保存我们整个公司员工的这个对象的。
03:15
嗯,对,这个很好理解,就是咱们在这个展示的时候呢,看到的这个数据啊,一条一条的,这每一个呢,都是一个员工,嗯,然后整个呢,是放在一个数组当中呢,这个数呢,就是我们这里边的这个数组,那我们这个数组呢,目前呢是一个now值,我们需要给它把这个数据呢都填充上,怎么填充这里呢,提到了在我们这个name list的这个构造器当中。去做这个事情,那下边呢,这不提到了这个这个这几个事吗。是吧,这几个事儿说data塔呢,是在这儿的,哎,咱把这几个事儿呢,CTRLC一下。啊,主要呢,咱们在这个构造器当中就得做这个事儿了。行,那分别来看一下,说根据项目提供的data类来构建相应大小的employees数组,比如说我们这个贝塔在这儿呢,这个下边跟上边这个都一样啊,它是一一对应的,这个数组的长度呢,我们这一看是12,其实我们现在创建的这个。
04:10
哎,目前要创建的这个数组的长度,它就是12了,然后接下来呢,呃,我们这个数组长度创建好以后,里边的每个元素还都是now呢,哎,我们需要呢,一个一个的把它的对象呢填充上啊,你就需要考虑到具体每一个对象是什么类型,你就得造相应的这个employee的这个此类的对象,现在这个属性啊,该给人填就都得填上了,哎,是这么个情况,然后呢,把这个造的对象呢填到我们这个数字当中,这呢主要就是我们在这个构造器里边需要做的这样的几个事情。说白了,我们这个构造器的主要作用呢,就是为了给我们这个employees这个数组及数组的元素进行初始化,给数组啊,数组就是我们这个employees这个数组啊。
05:01
即数组元素进行初始化,数组元素人家是什么这个具体的这个类型的,你就得给人家造相应的这个类型的一个对象啊,行了,那咱们下边来写一写啊,首先的话呢,涉及到关于我们这个数组的一个初始化了,那我们就CTRLCCTRLV这个比较简单,等于new employee类型的数组长度。这个长度是不是就取决于我们这个data塔当中的这个数组的长度啊,对,那这时候呢,我们需要在这去调一下啊,这时候我们要调的是我们data当中的一个结构,Data当中的叫employees这个数组对点单词就可以了,哎,这就可以了啊那大家呢,有的同学可能你看这个已经写好的这个代码的时候呢,你会发现这个位置,你看写的时候我是这样写的,哎,对,刚才早上还有同学也问这个事情啊,说为什么他直接可以这样写,对这个咱们前面讲in泡的时候呢,其实说过这个问题。
06:08
那如果你还记得的话,这个呢,是我们data大当中是不是一个静态结构啊,对这个静态结构的话呢,咱们其实可以这样的去处理,就在上面呢,可以写一个叫import,叫static是吧?哎,我们是com点艾特硅谷下的service下的有一个叫data嘛,Data下的这个所有的静态结构啊,我就点星了一下都可以导入来,导入进来这个时候呢,我就可以把这个位置呢,就干掉了。啊,此时呢,你把光标往这一放,它呈现的就是我们这个data当中的一个精彩结构啊,就是能这样写呢,是因为我上面有一个叫import static,你要是把这个删掉以后呢,这肯定就识别不出来了啊,那你就老老实实的把这个data点加上,所以也没省多少代码,就看你个人的这个习惯了,你要觉得这样写呢,看着有点费劲,你就上边呢加一个import static,把下边这个干掉啊,这就行,这是个小事啊。
07:02
好,这样呢,我们就把这个数组呢,进行了一个初始化了,但是数组的元素目前全是照下面呢,我们就需要呢,给人家元素呢一个一个的去扭对象,但是这时候呢,元素拗对象呢,拗的还不都不都是employee的,可能还是程序员啊设计师啊架构师的,所以我们下边呢得判断一下到底我应该去拗什么。那new什么主要取决于我们这个结构当中的是不是第一个这个信息啊,对第一个信息,你看人家是十,十呢,对应的就是employee,就new个employee,如果是这个12 12呢是一个设计师,你就new一个设计师,哎,所以呢,我们得先干这个事儿啊,咱们呢,先把人家这个叫an employee这个数组,这个数组的,那你其实是是不是每一行这个咱们是二维数组了哈,咱们叫外层元素和内层元素吧,这个外层元素的第一个,这外层元素是不是就很多呀,所以这里边我们是不是又得是要取一个循环了,I等于零,I小于我们这个数度点LAS,然后I再加这样循环,那在这里边呢,咱们去取出来每个I位置上的是不是内层元素是第一个呀,哎,看它,然后这个呢,取的话呢,你这是不是一个string类型。
08:19
咱们这是写的一个使这string类型,但是我们现在要比的话呢,是不是一个int类型,所以呢,需要需要是不是把string转换成这个int,这就涉及到包装类的使用了,还点pass int把这个扔进去,嗯,这样的话呢,咱们就得到每一个这个类型了啊,我叫一个tap吧,对吧?嗯,这个tap得到以后,其实呢,就相当于得到你这个十,11 12 13,根据呢,这几个数,我们决定去new哪个对象这个类,这个这个类型呢,又不那么多,我就用个Switch了,T。Tap tap呢可能是十,十呢,其实你就别写十了啊,你这要写个十呢,有时候大家懵了,十是什么是吧,人家在这个,呃,这个data塔这里边,这个十是不是就用这个来表示了。
09:15
对吧,所以你就别在咱们这个代码里边这去写十了,这个体验会很差,你你就写这个employee就完了,如果大家上面没有去写这个import static的话呢,这个位置你就得是不是这样写了,哎,对,这个要注意一下啊,行,那如果你要是十的话呢,咱们就去new这个呃,Employee,然后呢,你要是这个其他的这个就咱们先把这个先搞定啊,嗯,Programmer。是他的话呢,就去new这个,还有可能是这个。诶,这不就这样嘛,首先先把这个框呢,我们搭起来行,那这里边儿我们去写,如果呢,你是一个employee,就是一个普通的员工了,那我们这里边呢,你就是,哎,咱们现在是employees数组的第二个位置。
10:10
啊,这不,咱们取得是第二个位置的第一个嘛,第二个位置呢,我们得去给人家去扭一个,就是一个普通的employee行out斜杠,这呢,我们就调了一个代参的构造器了,代餐的构造器呢,你需要给我们提供ID name a值和salary这几个值呢,是不是就从我们这个数组的后边这几个位置去取了,哎,从后边去几个去取,那后边这几个取的话呢,你会发现,嗯,我们这些呢,都是属于employee的子类了,就是程序员,设计师,架构师也好,他们都有这几个属性,都得去,你后边造对象的时候都得需要这几个,不妨,我是不是就不要写到这个位置了,反正你们都有,我是不是就写到这个上面这块了。啊,在这个位置咱们去获取啊叫啊属于叫employee的这个四个基本信息。
11:04
哎,四个基本信息上面这个呢,相当于是获取这个叫员工的类型了,根据这类型呢,咱们去造的是不同的这个对象了,那四个基本信息,首先第一个叫IDID呢,整个在咱们这个数字当中全是string啊,那你记着该做这个转化就得做转化了,所以这呢,我们还得用一下这个in第吧,哎,Pass in,哎,Employees这个数组。Employees,这个别选错了,这个是。I,嗯,这个是一了吧。第零个位置是类型,这个位置就是ID了,In型的一个ID。嗯,然后接下来内啊,内本身就是string型,就用不着转换了,嗯,这个直接就是我们这个把它呢复制一份CTRLCCTRLV,这个脑子一定得清楚,这时候呢,别晕了,这个每个位置都得很小心,然后edge edge又是一个in才行啊,CTRLCCTRLV。
12:08
这个改成三,然后salary。Double。在咱们这个员工当中,这不是个double类型嘛,所以这个呢,我们就得是double的,嗯,Salary,那等于那你就用double.pass double了,这写一个四行,这个清楚吧,嗯,好,那四个基本信息获取完以后,我们在这个Switch外边定义的,当然在这里边是可以用的,这不我们就new了一个employee了,这这就搞定了啊,它还相对比较简单一些,好啊,那再接着往下,接着往下呢,如果说你这个I的位置呢,它的tap呢,你发现它是一个programmer,那自然而然你在这个位置我们得需要去new一个啊这个programmer。
13:03
Grow grammar out,斜杠,我们呢,当然愿意选择用这个带餐的了,你要用空三的,你还得调set方法啊,很麻烦,所以就调它,调它的话呢,前面这几个ID name age salary都好办,后边呢,涉及到一个设备。封号一下,这个设备的话呢,正常来讲,咱们需要在这儿是不是去提供一下。啊,那你就得是e equipment啊,这写一个e equipment等于你去把人这个设备呢,提供好设备呢,先导入一下设备呢,又得去参照,呃参照我们这个data了,Data里边的话呢,不是所有人都有设备,只有我们这个成员再往下它才会有设备,那设备怎么找呢?就是凡是你看这里边是十十一十二的这些呢,你就去看你是Di项,你就去这里边找那个对应的那个Di项,Di项里边呢,你就这个设备把这些。现在相当于现在,我们还得把这个数组里边这一条条的元素呢,还得把它们再转化成一个一个的对象。
14:04
那才行啊,那这个对象呢,又涉及到好几种,因为呢,这个设备里边有几个具体的实现类了,可能是PC notebook或者printer打印机,那他们呢,到底是谁,又取决于他的每一列的第一个。第一个嗯,可能是二十二十一,那21的话就是PC 22呢,就是它这个就是它跟咱们上面处理employee呢有点像。所以这个的话呢,应该咱们这个一行代码是不是搞定啊。银行代码搞不定,搞不定的话呢,咱们那那是不是就封装到一个方法里啊,哎,我这写成叫create,一个叫equipment,那我创建一个设备,这个设备你得告诉我你是哪一个索引位置的,所以这呢,我们把这个I传进去,就是你对应的这个想找第个位置这个员工的设备嘛,那这个的话呢,我们就得去提供这样一个方法,这个方法呢,我们就写到这了。这个能理顺不?这能跟上这块呢,这个方法的一个作用写一下啊,这个位置咱们就写成个叫index吧,嗯,这呢是相当于咱们叫获取指定啊,Index位置上的这个员工的这个设备,哎,就这个意思啊,再跟着跟着我这个节奏走啊,我们这个index指的是咱们这个数组当中,因为咱们刚才不是变了这个数组嘛,这个数组呢,我们随便找一个位,比如说它这个index,假设就是它这个index是它,它呢你看看是0123,它是四,那你就对应的去这里边找零1234就找到它了。
15:47
啊,你那个index是几,我这块呢,也找你这个数组的index,那这个数组的index它也是个二维的哈,它外层这个index位置上的啊,内层的这元素的第一个位置,你看它是几,你就知道你去扭谁了。
16:03
其实跟咱们处理上面这逻辑呢,是有点像的成嗯,来小心一点,咱们去写啊,首先意味着咱们先得去调一下这个叫equipment这个数组了啊,Equipment这个设备。Equipment,对这个数组,这个数组呢,咱们是调这个index,它先取D0个位置呗,这样的话呢,这不就把是不是你这个index假设是它的话呢,就把这个是不是就拿到了这个的话呢,又是一个string型,咱们现在是不是又得对应着你是一个int型,所以还得做一个转换啊in啊in.pass int。诶把我们这个呢扔进去,嗯,扔进去呢,回过来这个我们又得到一个in特型,这个呢,你也可以叫一个tap,诶它的类型,然后接着呢做了一个Switch tap,嗯,那它这个type的话呢,人家取值呢,就可能是这个21 22 23,这个也一样,别写21 22 23,这就晕了,你写上面用这个数,用这三个数,所以这个位置我们就K4一下,你呢可能是一个PC。
17:15
Break一下这个PC,你看自动这块就识别了,咱们上面导过这个import static啊,然后呢,Case也可能是notebook outt斜杠,大家呢,尽可能的这个时候呢,就开始多去用这个out斜杠了,就是你要是写一半掉这个not啊,Out斜杠呢,你发现它出不来就说明写的有问题,你那我这一调能出来这个就对着了啊成那对应的就是它这样的三种情况,那如果你要是这个,其实它对应这个数是21了啊,你要是这个21。那那我们呢,就去扭一个PC,嗯,那在这里边呢,咱们就去具体的new了啊嗯,具体new这其实相当于咱们这块呢,Equipment呢,这不是要返回,其实就相当于在这去返回了,我们就new一个PC outt斜杠,咱们需要用这个构造器,那我们就接着呢,需要把这两个属性呢,给人家附上值,那这两个属性呢,就是去你这个设备的是不是后两个参数去找啊。
18:18
对,后两个参数找行,那首先呢,这个叫model,这个咱们就直接直接直接我这样调是不是就OK了,这个写个一呗。对吧,然后display这个我就就写个二就可以了。这是一一对应的啊,就是对应的这个就是model,这个就是display,就是去你相应的这个index位置的里边去找第二个位置和第三个位置啊就行啊这样啊这个那你要有return,这个是不是就不要了。不用break了就成,这是好,这就搞定了,或者你要觉得说这个看着有点奇怪,这个这是model,你要觉得不方便的话,你给大家提前先写出来也行啊,这叫model,取的是它。
19:07
哎,这个这是小事,然后这个呢是string的,叫this play。哎,取的是这个二来分号一下啊,这个位置呢,你就哎这个就用于model。哎,就这样处理啊,这小事啊都可以行,然后下一个的话呢,你是一个notebook notebook呢,自然而然的,这个也不用break了,直接呢return,诶我们去new一个叫note al斜杠。哎,Notebook这个我们也是用这个参数这样子啊,然后这里边的话,那个model model你会发现呢,咱们这个讲Switch k时候也说过啊,就是上面写的这个值呢,它下边这块呢,就顺应下来去用,那这块呢都去取它,那不妨我们把这个呢也放到上面得了。
20:02
也放在上面,然后后边这个人就叫price了,这个你把它呢再放上面就没有意义了啊嗯,所以这个呢,你叫display啊,那你在这获取的行,那就放这了,然后呢,这个model在我们这呢,还叫model,我就提前先取出来,然后这个叫price是一个double类型的,那你在这呢,你给人家这个做一个转换。Pass double这个呢,是我们设备的第二个参数,嗯,角标是二的这个,哎,把这个press放进去能看懂吧,可以啊,行,那接着在这个位置我们再去return,去牛一个叫printer。打印机。哎,掉这个行,掉这个里话呢,里的话呢,第一个呢,人家这个叫name了啊,这个叫name,它叫name,这个name呢,其实还是取的这个位置是吧,但你这个在这取过来这个叫model了,那我这个名要不就这样改一下叫all name吧。
21:10
啊,那这个时候呢,就是CTRLC这个呢,叫它这叫它这个它就是都是取的这个角标是一的这个位置了,后边这个叫tap啊tap跟咱们这个名又冲冲突了。能理解是吧,呃,它这个变量属性叫tab,我们这呢,这个也叫tab,那比如我这个改我这个叫keep吧,诶CTRLC啊这个CTRLV一下,然后在这个位置呢,其实这个操作方式这个多种多样,你也可以,比如我这个就不改了,我这还用它,我直接这块给它写死是不是也行是吧,这样是不是也可以啊对吧,或者你这个你改成K,这改成T。这个这个处理方式这就多种多样了,就是你看怎么着可读性好一点,就怎么着处理也行啊,这个位置你可以在这给它定义成一个叫死string类型的叫或者还叫tap,哎,你把这个拿出来,这这都是小事。
22:08
啊,这样也行啊,这个很灵活成,那这样写的话呢,相当于就是这每三个这个三个对象的话呢,他们的第一个这个属性都是在上面统一获取的,然后另外的这个第二个这个参数的话呢,这个我们在里边自动每次自己去获取了一下,诶可以这样理解成这个是21,这个对应的就是22啊,这个是23,所以呢,我们在这个成序当中,大家以后开发当中去涉及到一些这个数值的时候呢,不要在这里边去写上一个21 22这个可读性非常差,这是其一。另外的话呢,就是如果你要对应的这个数呢,后边要改,那你就记着,你可能很多位置都用过21都得改,而现在的话呢,我们定义成常量,你要是想改的话呢,只需要在这改一下这个位置,其他呢,凡是用它的位置就都改了。诶,我们都通过这样的方式啊去使用,这样呢就更清晰一些,好,那终于呢,咱们把这个设备呢就提供好了,设备提供好以后就返回了一个这个equipment啊这个equipment呢,咱们就回到这儿了啊好不容易把这个设备呢搞定了。
23:11
啊,这呢,咱们又回过来了,这个设备呢,是我们程序员里边的一个属性,那么程序员这块呢,就搞定了。啊,这个我们相当于是刚才又穿插了一个完成了一个额外的功能啊,然后再接着往下还回到我们这个这个这个员工这个角度,那有可能你这个I这个位置上的员工呢,是一个设计师,那我们就得去在这儿去new一个啊还是这样啊,我们去new CR c CR v去new一个呢叫designer。奥斜杠,那当然了,我们用这个代餐的构导T了,这里边呢,你会发现除了我们这里边的这几个属性之外呢,还有一个叫bonus。啊,这是其一,其二你这个equipment呢,虽然在这不报错了。虽然说不报错了,但是呢,我们这个程序呢,假设你算的这个tab,人家是design直接从这进来,他是不是也没有去获取它呀。
24:04
所以你这时候呢,这样写不对,那按说呢,我们得在这儿是不是再重新写一份,再写一份呢,这俩名就一样了,那你就还得写成个一啥的是吧。但写成语这样写个一是不是感觉很low啊,怎么办呢?对啊,你可以把它整个拿到上面,整个拿上面对吗?有没有可能会说我整个拿这。然后这的话呢,你这个这样这样这样OK不。会有一些潜在的风险吗?会呗。这就看大家这个关于代码的一个把控能力了,写这呢,这样写不好。或者说不对。为什么?我是不是找第二个这个员工的他的设备啊。第二个,员工一定会有设备吗?
25:02
是不是不一零,比如说马云吧,当我们这个S0的时候呢,我是不是就去里边去找设备,找这里边你再往里边找的时候呢,咱们不是调你这个里边的这个取这个右它的下一层零一,你根本里边是不是都没有那层的这个数组啊,这是不是就报错了。啊,那那怎么办呢。这样办不就可以了吗?我这光声明不去获取在这个位置的话呢,我们此时的问题不就是只是一个变量重名的问题吗?哎,我们呢,就这样处理呗。这样是不是更高级一些,只声明不处理啊,处理的话呢,还是在你有这个设备的时候呢,我们再去里边去create,诶这样的一个情况啊,那这个bonus呢,其实也类似你下边呢,去new这个,呃,这个架构师的时候呢,也会涉及到bonus,会跟我们这个equipment的这个是同样的问题,所以干脆咱们在这块呢,都给它声明出来啊,这个bonus呢,是一个double类型的。
26:12
哎,这个叫boners奖金啊,然后一个特型的叫stock,哎,这个都是他们各自的这个情况,哎,这个你可以确认一下啊,这是大玻璃型的,这呢是一个英特类型的,好先放这儿,然后在这个位置的时候呢,我们这个bonus,哎咱们做一个赋值,它呢是我们这个时候要清楚啊,咱们接下来呢,是。还是这个员工是吧,从这个员工的CTRLC想想,这个是写个五对不对。前面这几个位置呢,这是这是获取它的类型,这是获取它四个基本的属性是吧,再往后。再往后你看确实是不是就bonus了,对设备是在这里的啊,所以这个没问题成回来,所以这个位置我就写一个它,但是它的话呢,这个类型又不一致了,Double第2PASS一个double。
27:13
这样就搞定了呗。对是吧,然后再接下来我们呢,呃,如果你第二个位置呢,它是一个架构师,那你这里边儿呢,得去你一个架构师了啊architect。啊,这样好爽啊是吧,一路这个回车下去就行了,那equipment,嗯,这个保存一下啊,这equipment。Equipment啊,这个位置呢,首先你也得去赋个值在这,然后bonus也给它赋个值,这个呢直接直接你给它粘过来就可以了啊。诶,我这刚才点错一个键啊在这诶CRC这样好,然后呢,接下来这个呢,这块呢,你直接在这给它再附个值就可以了,哎stock呢,人家是个int型的啊T这点啊pass一个int啊调我们这个数组的接下来一个元素。
28:19
嗯,这呢写个六啊行,那这样的话呢,我们就把这个呃,RT你要是个架构师呢,给他造一个对象,整个呢,咱们这写的是一个大的循环,那循环的话呢,就是便利我们整个这个数组从头到尾根据人家的类型啊,是什么一个一个的去造对象,是不是就搞定了,有点悲撞是吧,那这里边这个细节还挺多的啊,就是这里边呢,咱们这个data呢,是用一个数组来存的,其实还是挺麻烦的啊,后边呢,咱们如果要是用集合存的话呢,这个就很简单了,包括呢,咱们再讲数据库再去取,再装配,实际上呢,后边咱们还可以用框架来做,没有像咱们现在处理的这么费劲。
29:01
啊,咱们现在处理起来感觉还是有点费劲啊,一点点的去取,尤其是这个数独的角标不能出错了啊,一出错了这就啊又要么呢是控制人了啊,要么呢就脚背为界了成,那这个构造器咱们就搞定。
我来说两句