00:00
我们根据这一个类图,我们根据这个类图,以及他们之间关系呢,我们把代码给大家实现一遍来走一个,首先我们先写哪一个大家都用的department,就是这个系。那大家想一想,这个戏里面应该有哪些信息呢?对,我写到这啊,这是戏。学院下面单位,那我就写了private,首先我觉得系呢肯定有名字,第二个呢,系应该有一个简单的描述,对吧,DS。C,好,那既然如此,我们给他提供构造。构造器,然后呢,给他提供set get方法。没问题吧,同学们。Get set方法写完了,很简单。细写完了过后呢,我们现在就可以来写,呃,这个从首先这个你不要再写了,这个是系统提供的,所以我们直接写computer quality和fo。In for college,我们把这两个呢给大家实现一下好了,来走一个。
01:00
现在我们先写computer college。他。Of college单词有人藏?Eat。OK。那他要干一件什么事情呢?他首先要去实现这个接口。实现哪个接口呢,这个接口。既然他实现这个接口了。同学们,既然他实现这个接口里面的方法,他就必须予以实现。说白了就是一个has next和一个next必须实现,对不对?好,现在我们讲过,因为你这个迭代器,你这个迭代器的迭代方式跟你内部的这个集合的,就是这个数组存放方式有关,所以说我们这边一定要体现出来,就是说这里。我们需要,我们需要知道,注意听啊,我们需要知道department。Department是。是以是以怎样的怎样的方式方式。
02:04
存放的B2存放你如果你不知道这个方式呢,你没有办法去用迭代器进行便利,没法写还是next,也没办法写next,所以说我们就要写清楚,比如说现在呢,在这个computer college里面呢,它的迭代方式我们写的很简单,就是数数组的形式。好,待会下一个我们换一个,然后再写一个position,我们写一个position,呃,这个代表它的一个位置,比如说写零。这个标识呢,便利的位置。便利的位置。好,现在有了这两个信息过后呢,同学们,我们来。干什么呀?我们来做一个构造器。构造器很简单,我们只要它就可以了。也就是说你到时间把这个。把这个department给我,我就知道怎么去便利对吧,所以这个地方呢,就传进来了。
03:02
就说把这个department内容传进来,我因为我要知道你是怎么存放的吗?你不告诉我,我无法迭代。我无法迭代,好,现在还next就比较好写了,那我们开始写代码。因为现在是数组的方式,所以说我写一个position,大家看,如果我们的position大于等于所没有department点,你看这个时候因为它是数组,我们就就用认识或者position,大家看情况position。诶,来走一个。呃,应该怎么写啊,应该这样写或者。或者什么呢,Department。对,他这个position。干什么呀,如果这个呢,等于空。大家想,如果这个条件一旦满足,还有没有下一个,没有了。就是你这个位置已经大于等于我们这个数组的长度了。或者说你这里面为空啊,没东西,那相当于下一个就没有了。
04:00
否则我们返回一个针。你看这是数组的方式来判断有没有下一个是不是,那待会儿呢,我们如果是集合可能就不一样。写完了,这是判断,还有没有下一个。判断是否还有下一个元素。对不对。那next呢?Next那就比较简单,Next我们一起注意不要忘了啊,以是数组的形式,所以说我们department。把这个position放进去。Position放进去,那这个时候呢,我们得到一个department,就是取出来了,取出来以后干什么事把这个position。加一。后移一位。那么后移移位以后,我们现在就可以把这个当前的department返回。是这样子的,所以说就实现了has next和next的方法,最后删除的方法,我们可以不去动它。但是可以写一个空,实现public void。
05:02
诶,这个方法为什么没有,我们写一个吧。好吧,Remove。这个这个方法呢,因为删除方法暂时不需要,所以说我这空实现。删除的方法,我们默认空视线。写完了空实现啊。大家看代码能理解哈。也就是说现在如果是数组的方式,我们假定computer就是我们计算机学院呢,他在存放戏的时候,他是以数组方式形成的。假如现在数组。我们就这样去编译,那显然我们还要写另外一个information。这个系就信息工程学院。干什么呢,College?他呢也应该有个迭代器。对不对,那这个迭代器已然要去实现。我们系统的。啊,写错了。
06:02
那先里面这两个方法呢,咱们也要去实现来走一个,那大家想一想。大家想想,有可能你这边其实就不一样了,比如说我们写,我们就换一种方式,比如说历史的,这个时候呢,它存放戏,它是以历史的方式来存放的,假如啊department。好,这边我们写一个department department。啊,历史的吧,这写,所以如果说我们这地方是什么呢,就说信息信息工程学院。学院。是以什么呢?它是以历史的方式,历史的方式方式存放。存放,诶存放怎么样细的。OK,那这个就OK,那这里面是不是先要一下包啊。包引进去。那这个时候,同样我们是不是也需要一个?构造器呀,我们是不是也需要一个构造器?好。那现在既然既然他需要一个构造器的话呢,我们就给他写一个构造器就可以了。
07:04
对,我们写个构造器。好,我们来看看构造器呢,我们,呃,同样我们还需要一个索引呢,啊,现在我们加index。这个索引我们假定为负一,这是索引。就表明我们现在遍历到这个list的第几个了。明白。好,我们仍然按照原先那个套路,先做一个怎么样构造器,构造器把department list怎么样给我传进来,这个没问题吧,跟前面那个思路是一样的。给我一个。那给我一个,我才能便利吗?现在有了它了,过后同学们has next是不是我们就可以写了?大家还记不记得,如果对集合便利的has next应该怎么写比较合理一点?是不是这样写?如果我们的index。它默认为负一。它大于等于department。list.size就是这size了,减一,在这种情况下,如果满足说明什么?说明还有没有下一个没有了。
08:04
你都已经大于等于S减一了,它还有吗?不可能有,否则各位同学,我们让这个index。对不对,我们让这个index先怎么样。先加一。因为它往后面移动一下,然后再返回一个什么,同学们返回一个处就可以了。是不是这个就是判断,还有没有下一个判断集合中这个list中。还有没有?对,有。有。没有下一个元素能理解吗?好,显然这个next对我们来说也是比较轻松的一件事情了。next那就很简单,就department干什么呀?Department list.get index就可以了。是不是因为你总是先判断嘛。说我们在取的时候一定是hands next,然后再next。
09:01
去。这个顺序。不能颠倒。这个顺序不能颠倒,同样我们这个方法呢,我们也空实现。对空。来写个空实现这个方法。哦,假如现在我们没有remove对吧,那就public void什么呀。如果需要,我们再加。好,同学们,现在呢,我们把那个写完了,我们现在经过了一番倒腾,我们把这个写完,把这个写完,现在应该写一个呢,其实后面的代码相对来说没这么多了,我们写college。把这个college我们写出来,来走一个。College写一个这个应该是个什么呀,同学们,是个接口,是不是前面我们分析了college。他和college,他核心的方法是要干什么?返回一个。点下卡了好像。稍等片刻有点卡哈,咦,这个不应该啊。
10:03
稍等。有点卡顿哈,有点卡顿,稍等一下。完了这个小件它可能卡了。Eclipse一旦卡了过后呢,有可能会会起不来,那这样子我先。嗯,怎么办呢?不知道这个东西能不能再起来。这个很讨厌哈,很讨厌。嗯。看一下诶,好,这个应该缓过来了。应该缓过来了。保存一下,关一下看看。管不管用哈。Boss。好起来了,好这样子他就应该。我我再把它打开一下,同学们。我再把它打开一下啊,不着急。看看这边还在录制吗?啊,在录制没问题。
11:01
有时候eclipse这个这个工具,嗯,它卡了过后呢,咱们重新启一下就完事好。不知道东西还在不在,有时候没有保存就重新写,那就麻烦了,那就麻烦大了。好,EIP起来了,我们再找到刚才的这个代码。好像出了问题。这个代码不用管它啊,这个代码是刚才的一些小问题。好,我们再再找一下。嗯,College正在写college这个接口是吧。这个为什么是错的呢?不要了,先这个类我们不要啊,先把拿掉。Remove一下。好,Remove就行了,好,College我们写到这了,刚才也是写到这就异常中断了,对不对?就写那这里面我们认为首先你要把这个学院的名字告诉我对不对,学院名字在这系是系,学院是学院,所以我先我要提供一个get name方法。接口,然后呢,我们再写一个增加,增加细增加什么呀,增加戏的一个方法。
12:06
因为在学院里面呢,我们有很多戏,所以说我写一个这样的。抽象方法叫a department,没问题吧?那你加戏的时候是不是应该有名字和他的描述啊?前面我们说说过这个事儿。那么我们还需要一个什么呢?返回,返回一个迭代器的方法。这个迭代器就是用来便利的。OK,那现在我们写publicter,是不是刚才也是要写的ter,以这个接口来接收。那接收的时候,我们就写的是那个方法,我们刚才写的create什么呀?Createter。可以了。就是返回一个接口。这个是返回接口便利,那下面这个。十寸,这写错了。那下面呢,我们用两个具体的子类来实现college,这个college是把它实现一下。
13:03
来,我们走一段代码。那下面根据刚才的分析呢,我们需要两个具体的学院,一个学院是computer。什么样?是这样子吧,同学们。Okay。那这个学这个学院里面呢,我们来继承是不是应该继承啊实现啊,说错了,实现刚才我们写的这个college。没问题吧?实现这个接口。那当然这里面有方法,把方法呢,给它加进去就可以了,这些方法根据我们实际的情况来写就完事,好,比较简单。首先因为你你这个地方computer college,你的这个computer college的里面这个是什么方式组组形式的,是不是一个数组啊,所以说我这也要写数组department。OK,我就直接写了啊,不写太多东西,Number,我们写一个变量叫number of什么呀,Department。
14:08
这个呢,我初始化等于零,它的作用我说一下,这个作用是保存,注意听保存当前数组。的这个对象个数。OK,待会有用,那下面呢,我们再来写一个,就是控制专业数字大小,这个后面再说吧,需要我们再加,现在我们先把这个写清楚,名字先写好啊,这是返回一个什么呢?计算。计算机学院好,不着急,这个代码稍微有点麻烦,但是我们弄懂了大家以后就清晰轻松了,好吧,那现在首先呢,我们来创建一个,创建一个这个数组,真正的数据是在这加进去的。等于六一个department。OK department。数组嘛,那现在我们给它创建多大一个呢?我简单一点就五个吧,好吧,这个我就请简单一点,我就加里加东西了,爱。
15:05
嗯,那这个时候。哦,这个地方还。我想想这个应该怎么写哈。嗯,爱的话呢。艾的话我们这样写,因为你这个是加了一个名字和描述,我们先溜一个这样子写,我们重新来处理一下,六一个department。另一个department,把名字和描述放进去,这就得到了一个什么,得到一个department。得到一个department过后呢?OK,非常的简单,我们把它直接装装进去哈。这地方有些东西我没有控制啊,没有控制就算了。加进去。呃,那这个问题来了,你现在是第几个呢?因为你是数组啊,对不对,所以说这个number of就知道你是第几个了,是不是第几个了,好他原来是默认是零,那就是这个是第零个,然后给它放进去,放进去以后呢,各位同学。各位同学。我们。
16:00
把这个数量干什么,加一。加一表示我们已经加了一个。加了一个戏到这个computer。的这个学院里面是吧,这个没问题吧,那现在有一个问题,就是说你在加的时候,这个数组是不是应该溜一下,就是说因为你是把它聚聚合进去的嘛,所以说我通过一个构造器把它处理一下啊,我这写个构造器吧,这样写。那就写public。Computer。College。好,代码稍微有点多,大家不着急啊,那这边我们这篇六,我们六一个department的数组。六个department数组,假定我们存放五个元素,五个最多存放存放五个系。假定的啊,创起来。好,重新起来,诶这么为什么没生成哈。六。溜了一个这样的。
17:00
数组,好,我们来看看,那就是用它接收。对吧,让他接受,假定我们最多存放五个,那现在在这里我就直接给他初始化就完了好吗?爱。爱的department我就直接加,比如说我们第一个是呃,Java。Java,这个就在我们的计算机内,一个学Java的专业。好,描述我就不去描述了,好吧,就简单给他写一样。Java的专业。好,这个就有点有点费事哈。然后一我就加四个吧。然后呢,这个是PHP专业快速写一下。描述也是PHP专业,那么我们还有一个什么专业呢?大数据。大。数据专业,OK,这边描述我们写一个大数据专业到。数据专业。大数据。好的,呃,其他我就不加了,我就加上三个就行好吧。加进去。那同学们可以看到,当我们初始化之后,我们调查方法就把这里面放进去,当然它有五个我还没加完,大家知道这个意思哈,那爱的也写完了,那是不是这边就应该给我们返回一个什么呀?同学们,返回返回这个迭代器,迭代器从哪返回啊,同学们。
18:16
因为你现在是数组,对不对,你先数组,显然你返回的时候就创建一个对应的computer。Computer这个college迭代器就可以了。是不是,那这个地方你要把谁传进去啊,你是要把自己的这个department给传进去,人家才知道怎么便利啊,完事了,所有代码就这么一点。代码就这么一点,大家看懂了吗?啊。其实也不是很难,对不对,也不是很难,其实说白了就是大家有有注意观察到我们这个类图就是computer college呢,还有我们information college,它就是把这个department在这里进行一个初始化,然后把这个迭代器传过去的,他知道怎么去给你迭代就行了。所以他充当了一个中介。那种感觉。
19:02
好,这个写完了过后呢,最后我们还差一点点,好把这些都写完算了,还有一个O。For什么呢?我们的这个college。没问题吧,College什么呀?嗯,就就这个info college。那这里面呃,也要去,对不对,实现我们的college这个接口。思路就跟刚才大同小异了。思路就跟那个刚才大同小异,只是不同的,不同的地方是哪里呢?同学们想一想。同学们想一想,不同的地方是什么地方?是不是不同的地方?就是因为这个地方它存的可不是数组了,是什么呀,是list。是是一个department啊。是一个list是吧,所以说我们写个department是吧,List。因为这个时候它是以。OK,它是以这个历史的形式来存放我们的戏的。
20:03
故意这样写啊,那我返回名字上写,这叫信息工程。学院。啊,很快就写完了,不着急,艾的方式肯定要发生变化,爱的方式肯定要发生变化,因为你再加一个系的时候,咱们就很简单,就是你六一个department,这个肯定是溜一个department出来。另一个department go怎么办呢?OK,因为你现在是一个list,所以说非常简单,就艾特一下就行了,直接加进去department搞定,这个比数组添加要怎么样简单一点,好,我们再在这地方写个构造器是不是public,因为这个地方你没有处理吗?好,我们把它写到这里来。那这里面我们应该在这个构造器里面,我们要写什么事情呢,同学们。那针对department list,我们是不是应该溜一下,因为它东西都没有啊,所以我们又一个list就行了,在这个list里面我们确定就放的是department,搞定。
21:03
在里面我就可以加东西了。同学们非常简单啊,我就。Department,我加点东西,比如说我们加的是信息。信息,呃,信息安全。专业好吧。那这边我们描述呢,也写一个特别简单的描述,就是信息安全专业的描述。再加一个吧。再加三个。因为他这个就无所谓了啊,网络安全。网络安全。网络网络安全,我们再加一个叫做什么呢?叫做。呃,再写一个什么信息安全,网络安全,还有服务器安全,假如我们还有一个专门研究服务器安全的,好吧。安全专业可以了,加进去,那加进去过后同学们也知道返回这个迭代器应该返回哪一个的呀。因为你是in,显然你返回的应该是六一个什么。
22:00
OK,那就661个。对,在这个地方是不是我们要把我们这边创建好的department list给他传过去,他才知道怎么编译啊,代本就写完了。好,同学们,我们经过千辛万苦啊,呃,我们把什么写完了呢?我们把这一系列都写完了,最后差一个output。哦,输出的这个类,因为我们现在有两个学院。用两个学员,我们用客户端来写呢,太麻烦了,所以我专门写了这么一个输出类,让他把我们所有学员信息输出来就完事了,明白这意思吧,好,现在呢,我们专门写最后这一个,好,很快就完成。有有有,这个有点长哈,Out。Output什么呀?呃,Output实现。OK。那么我们把这个代码呢,给各位同学写一写,我们把这个代码给同学们写一写,大家一会就知道怎么去完成好,那首先呢,我们来做这样子,把学院的集合,学院集合拿到。
23:09
这个时候是学院的集合,不是系的集合了啊,我就用list做就可以了,College。这边我们放的就是college。因为他是个接口嘛,所以就写个college college那样写。这边我们把包包引进去。College east。那college这个单词写错了,College。好,这就没事。那现在我们仍然是需要也需要一个构造器的,是吧?也需要构造器,那你在输出的时候,你得把这一个college给我传进来。是吧,你在可能你在客户端的时候呢,你会呃,把这个历史的创建好给我给我加进来嘛,我才能开始进行这个便利,好现在呢,我们就可以输出了。输出,我们怎么输出呢?同学们,我们先解决这个学院输出,注意听,先解决学院输出系这个问题。
24:04
就是学院去输出这个系,那这个很好简很简单,就public贸易的print什么呀,Department。OK,那你在输出的时候,你肯定会给我一个迭代器,注意听啊,就关键点就在这一点点。Iterator。你肯定要给我一个迭代器,我才能输出你这个学院里面的戏,对不对?E简单的很,那我拿到一个eator,是不是这个里面的has next和next我已经有了呀。那就very easy了,While循环什么呀?这个eerator点有没有下一个,有吗?有OK,那么就取一个出来,是不是通过我们这erator取出一个,是不是这些我们都已经实现过了,那取出来过肯定是个戏了。我不管你是数组形式存放的,还是历史的形式存放的。反正你是个系。好,我写个D,当然这个时候呢,要强转一下。
25:02
因为他取的是按object来去返回的,现在是不是就可以输出了。对,我们输出,我们把这个戏的名字输出来就可以好吗?地点该在哪里?搞定。但是不要忘了,你只是输出系,你没有把学院说你只输出一个系,那到底这个学院有哪些呢?好,现在我们应该是干什么呢?便利所有的学院。OK,然后再调用,然后调用。要哪个呢?Print department。对,看还是很巧妙的设计department输出各个输出各个学院的戏,诶大家有没有发现还是有点意思的,对不对,那public void什么呢?Print。Heart print。呃,那这个地方应该怎么写哈,Department还是she呢?好,那现在我们就写个college吧,输出。学院。
26:00
OK,学院里面再包一下它就可以了,是不是好?那现在我们首先取出从哪里呢?从这个。College历史里面取出。对。取出什么呢?取出所有的学院。对吧,但是大家知道list本身就已经实现了,大家这个是清楚的吧,所以我就直接用迭代去取了。也就是说,我现在用college list.e拿到了一个。哦,说老师你为什么这方可以直接用呢?不要忘了啊,List是Java的集合,也就是说Java里面的list已经实现了,这个即可,Java中的哪个呀,内史特。或者说。呃,Java了,历史的易经。啊,已经实现了那个呢,ER这个接口。那么我们可以看一下是不是这样子的,来走一个。
27:01
好看一下list,在list里面它有个。往里面再追一把。诶,再再追一把。OK,在这里面是不是它有个able啊,这我们是再往下面追一下。啊,你看这个ER里面是不是它聚合了一个啊,它聚合了一个erator还是可以用,是不是还是可用的,因为这里面它有方法吗?ER,它中国的ER不是又把这个,呃,他通过方法把这个这个对象给你返回来了吗?是这意思吧,同学们,虽然他没有实直接实现,但是它里面是能够得到一个interator这个。呃,这个迭代器的是不是啊同学们好,那有这个迭代器,下面我们就比较easy了,来Y循环。外循环什么呢?Department,呃,我们现在是这样子的。你到这个地方,这个ER呢?我们可以干什么事,同学们?大家想想。其实这个地方啊,准确的讲。他从这一张取出来的是。
28:03
什么呢?取出来是我们的各个。学院好,我现在就可以去学院了,外循环来走一个,如果it对点has next。好。那这个时候我们就可以取出一个学院了,这个大家能理解吗?叫e.next是不是他取出一个学院?是吧,是取出一个学院,好,既然取出一个学院,那么我就取个名字,就叫college。因为你放了学院,我取出学院,这是再正常不过的。拿到一个学员,那拿到一个学员过后,同学们我就可以去输出这个学院的名称。好,很快就要结结束了啊。不着急,如果听内的同学呢,可以,呃,稍微的休整一下学院的名称,我们就写到这吧,加到这。佳佳,诶,这地方有点小问题,佳佳好,我们把学院的名称取出,就是你的,你的学校学员叫什么名字拿到了。
29:04
拿到这个名字过后,不要着急通过这个学院。是不是我们就可以取出什么呀?取出它的迭代器了。是不是诶。这个地方我们看是不是叫做next的。Call next这个其实取出来好。嗯。啊就可以了,就可以打印了,怎么打印呢?大家看是不是这个print打出一个系。我们就可以把当前这个学院的迭代器给他返回就可以了,怎么呢,Create。是不是这样子,同学们一下就搞定,因为你在这地方取出来的这个college,它具体的这个对象是指向一个computer college还是information college,这个他是知道的,然后我再通过这个值来去获取到create,那就得到了对应的什么呀,得到对应的。得到对应的迭代器。
30:02
迭代起绕遍历就完事了,代码就写完了,同学们好。那写完以后,是不是我们还差最后一个哪个呀,可难去调一下就整体结束了,好,来朋友们,我们写一个。写一个主方法来测试一下最后一步,最后一步,好,关键的最后一步来了。那首先呢?我们呢,先来创建。创建学。我们现在有几个学院呢?有两个学院好,我现在先用一个a list来。List。这个历年我们放的就是college对吧,是学院。好的。那么诶,我们看看这一幕,接收一下呗。OK,这边我们写个college list。College,诶,College list,那么这个college list里面我准备放这个地方用接口来接收啊,跟我们前面那个想的一样。哎,这种仍然是要引包包好。
31:02
进去了。那现在我往这个college里面做什么呢?首先我创建一个computer,注意听啊,Computer。Computer的。一个college,这个没问题吧,同学们。好,我拿到一个computer。对,然后呢,我们在创建一个information。就是信息工程学院。对,我们也拿到这样一个对象,好,有了这两个学员过后,我是不是可以把它加进去了呀?怎么加进去同学们?College list the a。是加就行了,这样子爱一个什么computer。把计算机学院加进去了,再加一个ID,加一个什么呀,再加一个information好可以了。这个做完了以后,同学们,我们创建一个输出的类的对象,把谁放进去,把我们这个college放进去。是不是啊,同学们。然后我们就拿到一个输出的输出类的一个对象,然后用output去怎么样调用print。
32:05
考20。好,这个时候他就会去追到college,然后便利这个,这里面存放的所有的这个学院,然后再把这个学院对应的迭代器拿出来,一个便利。依次便离那运行值,同学们,我们来跑一跑,看代码有没有问题啊。一般来讲应该没啥问题,有问题我们调调好,同学们可以看到very good,你看计算机学院,Java PHP、大数据、信息安全网络OK的。OK,假如你这里面只放了一个学院进去,OK。假如你是放了一个computer,好,那这个时候便利出来的呢,只有计算机学院的信息明白,多么的方便,多么的方便。当然如果你听懂了,你可能会觉得,诶,这种模式还真是挺有意思的,很神奇。为什么呢?他他其实是做了这样一件事情啊,同学们可以看到。他他其实嗯,这种地方。
33:02
他其实在做什么事呢?同学们有没有发现他是这样子的?他这个啊,不好意思,他这个怎么又失失灵了呢。保存一下。哦,现在正常了。也就是说大家有有发现一点哈,他这样子的就是他这边迭代器呢,其实主要是来根据你这个集合的组织形式来进行一个便利,他在这边就处理好了。而数据其实本身是真正存到这里面的,但是你存好了过后呢,你既然要让别人变利,你要通过一个方法给传过去,他才能变,知道吧,数据真实是存在Co computer college和information college的,但是别人变的时候,你要想办法传过去,怎么传的呢?大家有没有发现?他是这样传传过去的。当我们去。有一个computer,创建一个迭代器的时候,就是通过这个college,我们返回一个迭代器的时候,是把这个内传进去的。
34:00
就是把你这个戏里面的。呃,把你这个学院里面的戏是实际上是通过这个迭代器传过去的,所以非常巧妙。这样呢,就无形之中就让他这个数据达到共享了。当然没有重没有弄两份对不对,没有那两份OK,好,同学们,那关于我们这一个迭代器模式的应用案例,老师就就讲到这儿,不知道大家听懂了没有。没有听懂的同学多听两遍,多听两遍一定会有所得的,这就是他的一个迭代性模式的经典使用,这个呢,其实在我们工作中用的很多啊,待会儿呢,我们再看一个源码,加深认识,好,这一讲就到这里。
我来说两句