00:00
迭代器模式的注意事项和细节,我们来看一下,主要说说一下迭代器模式的优点,还有它的不足的地方,那首先我们看迭代器模式的优点还是比较明显的。它是通过。提供一个统一的方法来便利我们的对象啊,具体来说其实是个集合,那对象呢,客户不用再考虑聚合的类型,使用一种方法就可以便利对象了,那他隐藏了聚合内部的结构,客户端要便利。一个聚合的,聚合的一个对象的时候啊,或者是集合的时候,我们只需要取到迭代器而不知,而不需要知道聚合的具体组成,就是说它到底是一个数组还是一个链表啊,这个无所谓,那么它提供了一种设计思想,就是一个类应该只有一个引起变化的原因,其实这就叫做单一职责原则,对吧,一个完成便利,而另外一个从我们的数据。说各司其职。那么在我们这个聚合类中,同学们看到在我们聚合类中,我们把迭代器分开,就是要把管理对象的集合,就是管理对象的集合和便利对象集合的职责分开,这个在前面已经看的很清楚了啊,还是以刚才那个为例,Or list?
01:17
对不对,数据我们的对象是放在一个数组里面的,而我们的便利呢,是通过I tr I tr这样一个返回的迭代器来便利我们这里面的具体的集合或者具体的数据。我们前面讲的。院校的便利也是一样的,所以说它是要把管理对象的集合和便利对象的集合职责分开,那么这样一来,集合改变的话,只影响到聚合的对象,而如如果便利方式发生变化呢?只需要影响到迭代器,各司其责。对不对,如果说,呃,如果说你这个便利方式,想想换一种,那你只改这边就行。那如果说你这个数据的形式要发生变化,那你就改这边就可以了。
02:04
它属于分开的,所以说当我们要展示一组相似对象时,或者便利一组相同对象的时候,是适合使用我们这个迭代器,但是迭代器呢,它也存在一个问题,就是每个聚合对象。都要有一个迭代器。会生成多个迭代器,不好管理类,这点刚才大家也体会到了,比如说前面我们讲的list。诶,它会,它这个list是一个聚合对象,它这会需要一个迭代器,而我们的link list,因为它数据组织形式不一样了,Link的list那他也需要一个迭代器。所以说这就需要每个聚合对象呢,都需要一个对应的迭代器。这样呢,就会生成多个迭代器,不好管理。OK,这是他的一点缺点,大家知道哈,所以说呃,你在使用的时候要注意这个,注意这个细节就OK。注意这个细节就OK了。
03:00
好的,那关于它的一个注意事项和它的优缺点,我们说到这里,那现在呢,我们把迭代器讲解的内容我们做一个梳理,我们来看一下迭代器我们是怎么讲解的好。那现在呢,我们把它的内容梳理一下,这边讲的是迭代器模式。那迭代性模式我们是怎么讲的呢?OK,还是先看了一个具体的需求。其实这个需求呢,我们在前面是。用过的,我们是用组合模式解决过,还有印象哈,放在上面的,我们是用组合模式解解决过,现在呢,我们要把它换成什么呀,换成迭代器模式来完成,就这么一个区别。所以需求对于我们来说并不陌生,就是要展现出各个学院的性,它下面所拥有的专业或者叫性。需求提出来以后呢,我们仍然先给他说一下传统方案的解决方案。那么传统方法就是我们传统的一种方案呢,是还是用的继承,但继承我们也分析了,它是有问题的,对吧?因为你继承的话,你是站在一个什么呢?站在一个组织大小的角度来分析,这样呢,并不能够很好的解决他的便利问题,因为你你比如说你学院是以你学院你学你学校在放学院的时候是以数组的方式来放的,但是学院在放戏的时候又是用链表的方式来编来存放的,那就还是不好解决吗?
04:33
说他的人不好解决这个问题,而且当我们这个层级分的越来越多的时候,他存放的形式就会越多,那你要考虑东西就会越多,这样就违反了OCP原则,对所这样子的,所以说我们这个传统方式呢,是存在问题的,于是我们分析了一下传统方式存在的问题,引出我们要讲解的什么呀,迭代型模式就这么来的。先分析了一下传统方式的问题。
05:00
OK,引出我们要讲解的什么呀?迭代型模式就在这引出来的。那引出来这个问题过后呢,我们就给大家先说了一下迭代器模式的基本介绍,就是它到底是个什么东西,来聊了一下。我们先说迭代器的基本介绍,说了有这么三点,我们来看一下哪三点,再回顾一把。首先呢,我们要非常明确的知道迭代器模式,它这个叫ter,他它也是一种比较常用的设计模式,比较比较常用。嗯,它的核心作用是这样子的,提供一种便利集合元素的统一接口,OK,用一致的方法来便利元素。便利,它并不需要你集合对象底层是什么样子的,你就说我在用,对客户端来说哈。如果你对于迭代器的具体指类来说,那肯定要知道你是怎么组织的,但是对于客户端来说呢,调用者来说,使用者来说,他并不需要知道你结合对象的底层是这这样一种关系,OK,好的。
06:07
那迭代器基本介绍说完了以后呢,我们为了加深大家对它的理解,我们又说了一下迭代器模式的一个原理,类图,加深对它的认识,我们用图的方式来说一下,是这样的吗?同学们。呃,然后呢,我们还对这个原理类图做了一下角色的分析。是不是我们说有含有哪几种角色?那这个类图呢,我们也给同学们板书到笔记中。画了一下对吧,内图有时候是比较容易比较清晰的,把这个关系展现出来了。好,我把擂主拿过来。那当我们把这个迭代器的基本介绍说完了以后呢,我们就举例说明了,因为这个时候我们已经有理论基础了,需需要来实践一下,所以说我们就来做了一个应用实例。对吧,然后呢,我们这边又给他编一个号,那应用实例设计模设计方设计方方式呢,我们画了一个类图来看一下。
07:08
好,这为什么有错,把它拿掉就行了。我找到。这个包包在哪里呢?在这是不是我们画了一个类图啊?诶,画了一个类图,这个类图呢。展示了我准我我希望用什么方式来解决的没思路,从这里可以看得出来,这边就是我们的迭代器,或者说电力方式,这边是我们的一个存放方式,就是具体的数据是存到这边的,然后呢,不呃,根据你这个具体的存放方式不一样,我们每个都提供了一个对应的什么呀,迭代器,这样子分开了吗?间分开了,就是各司其职,这样就符合我们的单一原则,最后呢,有代码实现还是老规矩,代码实现的内容比较多,我就没有办法一个一个的拷贝了,对吧,所以说我就把整个文件夹给压下。
08:02
那么为什么我们在讲的时候要把源码给敲一遍,就是要让大家真正的理解,如果我不敲这个源码,我直接拿过来给你们看,有时候你实际上你很难理解,就我上来把这个代码一粘。你知道是怎么来的吗?你很难知道,所以我们要学,你就把它学,学的透一点。好,这是代码的实现,那么代码实现完了过后呢,为了加深认识,是不是我们又从源码的角度来进行了一个分析,就说你既然说迭代性模式在开发中用的比较多,那你举个例子,我们找到在JDK里面呢,很多的这个集合类好都是用迭代性模式,比如list linked list。哈希table啊,都是用这种方式来走的。好,那这里面我们就画,呃,说了一下这个源码对不对,源码呢,我们也给他追了一下。具体来说是这用用的时候呢,这好等等等等,我就不再赘述了,最关键的地方,我画了一个类图,我们把它的类图拿过来,在哪里画的类图呢?
09:04
在eclipse里面分析源码的时候,这有个类图。对,这有个类图,我把这个类图给同学们拿过来一看就明白了,是不是通过这个类图就一目了然的?把这个说清楚了。对不对,你看这边就是我们的具体实现的之类,这个就是我们list的之类,除了有link list or还有很多其他的。我就没有一个个写了,因为太多了嘛,啊太多了,那写太多了没法弄。好,这边我们相当于是画出了一个类图,画出类图以后,我们是不是又对这个类图做了一个说明。对,我们这样说,对。对,这个类图。内图的角色。做了分析说明。分析和说明,那具体来说是怎么讲的呢?大家可以看到我在这地方做了一些说明。是吧,OK。把这整理一下就可以了,那为了好看呢,还是给他来编一个小号吧,打个勾勾好。
10:05
最后我们讲完了以后,我们还说了一下迭代器模式,它的使用的注意细节,其实主要是说了它的优点和它的缺点。优缺点都说了一下。分析了一下,好,我们先说的是它的优点,那优点呢,从这里可以看出来。诶,他从这方面可以看出来它的核心对吧,它是一种设计思想。那么这种思想呢,它可以把要把这个管理对象的集合和便利对的集合职责分开,这样假,这样他们就各司其职,是符合我们的单一原则。同时也解耦了,对不对,好,那么缺点呢,就是呃,就说因为你对每一个聚合对象都要有个迭代器,因为你可能不一样嘛。啊,所以说呢,这个时候就会造成我们迭代器比较多,这是这这是同学们在用的时候要注意的,但是呃,如果从它的优越性来讲呢,我觉得这个也不算什么,你不可能什么都占嘛,没有一样东西在世界上没有一样东西是只有优点没有缺点的,我觉得是这样子,对吧,你说这个交通工具,以前我们古时候是骑马到一个地方要很远,它是缺缺点,但是他们它安全呢。
11:20
很少说有人有人这个骑骑马的时候死了多少人吧,是吧,因为他是一个人,但是现在飞机快,飞机飞机一旦失事,那那那就是几百号人,说说有缺点有优点,大家看一下就行,好同学们,那关于我们这一个迭代器模式的内容梳理就给大家聊到这里。
我来说两句