00:02
迭代器模式的基本介绍,我们来看一下,既然我们刚才讲到了用迭代器的模式来实现。对不同。这个集合的便利,那么我们用的迭代器,迭代是叫edit pattern,它是一种常用的设计模式,属于行为的。属于一种行为型的模式,那么也就是说,如果我们的集合元素是用不同的方式实现的,可能是数组。可能是Java的某个集合或者还有其他方式,那么当客户端要便利这些集合的元素的时候,我们就会使用多种便利方式,这就有问题了,因为如果你使用的多种便利方式,就有可能暴露元素的内部结构,所以说我们用迭代器模式面试,那么迭代器模式可以干什么呢?它可以提供一种。便利集合集合元素的统一接口用一致的方式,注意听是用一致的方式便利集合元素,而不需要知道集合元素的底层表示,即不暴露内部的结构。
01:03
这是它的核心,那既然如此,基本介绍说完了,那下面呢,我们来画一个类图,我们通过画这个类图来帮助同学们理解这个。我们帮助同学们理解一下这个集迭代器模式,它是怎么来实现的。啊,怎么来实现的?来,我们来画一个图,帮助大家理解打开这里。我们新建。一个包叫。好,跟上我的思路。没问题吧?好,那现在呢?我们在这里就开始画一个图来描述他们之间的关系。描述他们之间的关系。走一个画一个类图。画一个类图中。那这个类图咱们怎么去画出来呢?大家跟上我的思路,我们这样子来画,比如说首先同学们看,首学们看肯定有的接口,这个接口是系统提供的,大家还记得吧。
02:10
在Java里面是有一个叫的。这么一个类的,我们再来看一下,比如说现在我写一个特别简单的方法。我们来看一下这个接口里面有哪些核心的方法,来看一下。不着急,好写一个命方法。OK。在这里面我们写上这个接口A。Wait。我们看一下源码,查一下它源码。OK。好,这这里我们我们可以看到这个里面有hands next next remove,好,这里面这三个是我们待会要去实验的方法,所以说相当于说在这里面呢。好,这个地方是不是这个图没有保存,刚才丢了,再加进去吧,再重新写一下啊。
03:03
好,这里面呢,根据刚才我们所说的有哪几个方法,第一个方法就是。同学们看到的这个方法,Has next。是不是next,我把它写到这里来。OK,简写啊,那这个地方我们返回的应该是不定值。Bos,这是它这个接口里面的一个方法,我们要去实现的,还有第二个我们看一下下一个是next。这个方法呢,我们也要去实现,它会返回一个E,是不是好。这个一好类型。那返回类型呢,是用这个半形来表示,诶不是这个。这样写。一。那紧接着我们再来看还有什么呢?OK,还有一个核心的方法,就是我们这写的remove就移除。如果在这个迭代器集合里面我们不需要了,我们可以把移除掉。
04:07
那大家看到ER,那ER完了过后,我们下面呢,就会有一个具体的实现这个接口的类叫concrete。Concrete什么呢?后面我们都会用到,那让他干什么呢?各位同学让他去实现这个接口。没问题,那实现这个结果,其实说白了就是把里面的方法重新做一遍,我就不画了啊,同学们你实现它肯定要把这些方法都做,把它方法都实现嘛,这是肯定的,我就不画这个图了,紧接着我们再来看下一个,同学们可以看到我们还有一个什么呢?还有一个接口。这个接口是用来做聚合的,待会我们还画a Grace。GT,应该是这样写的吧?我们看一下是不是这个这个单词啊。和a a re。阶梯应该是个聚合,那这个是干什么呢?这里面它会有一个比较核心的方法叫什么呀?Create,就是它会返回一个迭代器。
05:09
CREATE。谁要1a create一个什么呢?就是呃,我们这个这个这个接口呢,会有一个create edit,那到时间我们会怎么去处理呢?同学们看我这里会有一个类。他会具体的去实现这个聚合,就concrete。OK,然后呢是agree。让他去实现它。好的实现它,那实现这这个问题就来了,那我那么这两者是什么关系呢?好,我告诉大家这个呢,我会用到它。我会用到它,也就是说在这个地方,同学们可以看到,在这个这个concrete aggregate里面呢,会得到一个迭代性,当然我们可以这样写哈。
06:02
呃,返回一个这样的东西。好,大家大致能猜出来是一个什么意思了吧,就是。就是什么呢?他把他把这个这这个concrete great,当然这个地方反回来肯定是concrete great,这这个类型的,然后通过这个迭代器呢去便利。那显然,既然要便利,这里面肯定会有一个集合的。就这个里面可能有个集合啊,这个集合假假如啊,我就随便试一个,比如说这有个集合叫element,有很多元素在里面,比如说是一个数组的,或者是一个list的,我无所谓啊,Agreed list。比如说比如说。那也就是说我们在这里面呢,会去通过这个迭代器,这个迭代器就是concrete迭代器,通过这个迭代器呢,去便利我们R,当然也可能是一个数组。也就是说他这边可能有好几个注意,听你既然有一个这样的迭代器,那当然我还有别的迭代器。
07:03
诶,这个地方我们复制一份啊。这样,比如这是另外一个迭代器,写个零二。画个意思啊,同学们,那什么意思呢,就说这个地方又去实现了。那当然有些同学说老师那这边有一个concrete great,那这边是不是也有个的确,那就一一对应。那也就是说你这边有,你这边有一个concrete的agg agree,呃,Aggregate去做它,那么我们这边也会有这样一个东西,我复制一份。大家大致大致明白什么意思啊,来走到这儿,比如说我们这是零二。这个是0202呢,这里面它可能是组织的形式啊,各位同学它。他这里面。这里面这个组织形式可能是一个数组,比如说我们写成一个数组吧,比如说这里面放的是一个数组的形式。好,我就简单写到这里。
08:00
那这样子的话呢,怎么样,我就说我这个concrete great呢,可能会去用到依赖云,依赖云这个。这个迭代器,那显然他也会去实现concrete,也就是说这里面也有一个concrete concrete返回一个迭代器,只是这个迭代器是它这个迭代器了。大家有没有发现,从这里我们可以看出来,就是我们这这有对应的迭代器,这边呢,会有一个聚合的,把迭代器聚合到这里面去,然后我我在用的时候就简单了,我调用什么呢?我有一个客户端,注意听。假如我这里有个客户端,注意看client。那么这个客户端呢,我只要去使用通过这个接口去找到一个具体的concrete agree,然后呢,这边同学们看这边我肯定会拿到一个迭代器是吧。那这样子就简单了,怎么简单呢?至于你这里面放的主去,你存放的是数组还是我不关心,我只要让你这个迭代器拿,我只要拿到你这个迭代器了,就可以拿到这个迭代器呢,我用这个has next。
09:07
和next进行遍历,这样呢,我就屏蔽了你的数组,就是你这个数组还是一个release的一个问题。是这样一种关系,好吧,好,那现在呢,大体的意思我们就明白了,大体我们意思明白,那待会儿呢,我们用呃代码给大家实现一把,就是用这种。叫做什么呢?叫做迭代性模式,我们来完成那个学校的一个便利问题。我们把这个类图,各位我们把这个类图呢,给大家复制过来哈,当时当时把这个忘了,把这个类图给他复制过来。把类图呢给大家拷贝到我们的这一个。PPT里面去加深印象啊,那么他这个角色就是原理类图这个角色呢,我们再做一个简短的说明来看一下。
10:01
啊。它是什么呢?这个是个迭代器接口。迭代器。Did。迭代起接口是什么呢?是这个系统提供的。呃,还有什么呢?它主要是还有三个方法,一个是hands next hands next,还有一个next,还有一个remove。是不是同学们这是它的这个结构,另外呢,我们可以看到concrete。Concrete什么呀,Concrete?这个是干什么呢?各位同学这个呢是具体的具体的叠。迭代器啊类。他管理什么呢?管理迭代器,管理迭代。迭代。好管理的,那下面还有一个同学们可以看到agree。A。
11:03
这个东西是干什么的呢?同学们是它是一个注意听一个桶。一个统一的,一个统一的聚合接口。它是一个统一的聚合接口。接口OK,那么这里面呢,它是干什么呢?它将它会会什么呀?将就是我们这说的这句话,将客户端,客户端和什么呢?具体的聚合结耦。它达到一个解耦的效果。还有一点,我们把这个放小一点哈,因为这个字体太大了,12。还有一点我们来看。嗯,给他来个背景色。好,这样看的清楚了,那么我们再看第四一点,同学,同学们看到congress。Con什么呀?这个是干什么的呢?OK,是一个具体的聚合。
12:03
聚合,它会持有,注意听这句话啊,它会持有对象的集合,也就是说。集合。也也集合,也就是说在这个concrete agree这里面呢,它会有什么呀,同学们。在这个里边它就会有我们具体的对象结果,那么在我这边有没有画出来这个对象呢?没有画出来。也就是说,呃,这个congre great里面呢,它会放实实在在被便利的那种对象。这个迭代器里面也会依赖这个,如果说我们画的更严严谨一点,应该还有这个这样一个东西,如果在这里面,如果画的再严谨,里面有个element。这个element呢,呃,它会干什么呢?它会它会聚合到这里面去。它会聚合到这里面去,也会聚到这儿。也会学到这儿。它是这样子的,也也就是说在这个嗯,在congre a great a great get里面呢,它会有这种集合,在这里面也也可能有这个集集合,只是有些是r list,有有些数组的,然后在这个conre里面,他也会用这个集合的方式来进行这个迭代,因为他是知道这个迭代器,他是知道你是嗯,你是一种,你是你是你。
13:24
就说就说这个concrete呢,他是知道你是以历史的方式来存放的,还是以数组方式来解存放的,因为它这有以来的关系嘛。所以说我在用这个迭代器的时候呢,我就会去具体写has next和next应该怎么去写这个方法,大家明白这什么意思了吧。可能还是有点抽象对吧,啊,如果画远景的应该有这个东西,所以说我写到这呢,我多说一句,就是说具体的句。它是一个具体的一个聚合,然后呢,持有对象的。一个集合。OKB,它会干什么呢?这边最核心是并提供提供一个方法可以返回什么,返回一个迭代器。
14:05
迭代器,当然这个迭代器他已经知道怎么去便利你这个集合了。OK,因为为什么知道呢?因为你每个迭代器都是跟这个聚合是有一个对应关系的,明白吧,OK,该迭代器,这想该。该迭代器啊,可以正确迭代。正确便利吧,正确便利我们的集合。好,最后一个,同学们看到还有一个client。嗯,同学们看到这个呢,这个可它的作用就是一个客端。客户端。钩端它有什么呢?它会它在这里面哈,在这个里面,它是通过它会依赖我们这个E和。啊,它会依赖。依赖也就这样说,他会通过什么呢?通过和和什么呢?和agree。
15:01
Aggregate。啊,这个接口来依赖,依赖对下依赖它的子类。因为这两个实际上是接口嘛,那真正依赖的肯定是他的子类。好,这样就OK了,好,那关于这个迭代器的一个原理图,还有它的一个说明呢,我先说到这儿,可能有些同学能够理解点是是一个统一的聚合接口啊,统一的聚合接口。统一的聚合结构,他这边这这边也有一个createre哈。大家大致明白,没关系,如果你这儿没有听懂,不要着急,因为我马上会写一个案例。这个案例呢,也会按照我们这个示意图来写一下就明白了,没有没有多难,这个迭代性模式比前面的访问这个模式要简单一些,容易理解一些。
我来说两句