登陆注册
8183300000219

第219章 7 迭代器模式的实现方式

大B:“由于迭代器模式本身的规定比较松散,所以具体实现也就五花八门。”

小A:“我们又应该用什么方法去实现迭代器模式?”

大B:“1、迭代器角色定义了遍历的接口,但是没有规定由谁来控制迭代。在Java collection的应用中,是由客户程序来控制遍历的进程,被称为外部迭代器;还有一种实现方式便是由迭代器自身来控制迭代,被称为内部迭代器。外部迭代器要比内部迭代器灵活、强大,而且内部迭代器在Java语言环境中,可用性很弱。2、在迭代器模式中没有规定谁来实现遍历算法。好像理所当然的要在迭代器角色中实现。因为既便于一个容器上使用不同的遍历算法,也便于将一种遍历算法应用于不同的容器。但是这样就破坏掉了容器的封装――容器角色就要公开自己的私有属性,在Java中便意味着向其他类公开了自己的私有属性。”

大B:“那我们把它放到容器角色里来实现好了。这样迭代器角色就被架空为仅仅存放一个遍历当前位置的功能。但是遍历算法便和特定的容器紧紧绑在一起了。”

大B:“而在Java Collection的应用中,提供的具体迭代器角色是定义在容器角色中的内部类。这样便保护了容器的封装。但是同时容器也提供了遍历算法接口,你可以扩展自己的迭代器。好了,我们来看下Java Collection中的迭代器是怎么实现的吧。”

//迭代器角色,仅仅定义了遍历接口

public interface Iterator{

boolean hasNext();

Object next();

void remove();

}

//容器角色,这里以List为例。它也仅仅是一个接口,就不罗列出来了。

//具体容器角色,便是实现了List接口的ArrayList等类。为了突出重点这里指罗列和迭代器相关的内容。

//具体迭代器角色,它是以内部类的形式出来的。AbstractList是为了将各个具体容器角色的公共部分提取出来而存在的。

public abstract class AbstractList extends AbstractCollection implements List{

……

//这个便是负责创建具体迭代器角色的工厂方法

public Iterator iterator(){

return new Itr();

}

//作为内部类的具体迭代器角色

private class Itr implements Iterator{

int cursor=0;

int lastRet=-1;

int expectedModCount=modCount;

public boolean hasNext(){

return cursor!=size();

}

public Object next(){

checkForComodification();

try{

Object next=get(cursor);

lastRet=cursor ;

return next;

}catch(IndexOutOfBoundsException e){

checkForComodification();

throw new NoSuchElementException();

}

}

public void remove(){

if(lastRet……-1)

throw new IllegalStateException();

checkForComodification();

try{

AbstractList。this。remove(lastRet);

if(lastRet<cursor)

cursor――;

lastRet=-1;

expectedModCount=modCount;

}catch(IndexOutOfBoundsException e){

throw new ConcurrentModificationException();

}

}

final void checkForComodification(){

if(modCount!=expectedModCount)

throw new ConcurrentModificationException();

}

}

大B:“至于迭代器模式的使用。客户程序要先得到具体容器角色,然后再通过具体容器角色得到具体迭代器角色。这样便可以使用具体迭代器角色来遍历容器了。”

同类推荐
  • 从平凡到神奇

    从平凡到神奇

    本书结合多年的开店经验,全面地讲解了在淘宝网开设店铺的相关知识,为准备在淘宝网创业的卖家及刚刚创建店铺的店主,提供全面的开店和经营方面的指导。本书按照淘宝开店的流程安排内容,侧重每个步骤中的实际技巧。本书分3个部分:如何在淘宝开店、如何开好店、如何做强做大店铺。前3章介绍了在淘宝网开设店铺的基础知识,指导读者在开设店铺前做好准备工作,以及建立起自己的店铺,并且完成店铺的第一笔交易;第4章至第7章主要介绍了网店装修和推广的方法,以及网店的物流经验和技巧;第8章着重介绍了将网店做大做强的方法,帮助卖家在开店和经营中树立品牌意识,做大做强自己的店铺。
  • 图说电子计算机

    图说电子计算机

    今天人们谈到计算机常常会把它和网络联系起来。20世纪90年代兴起的因特网其影响之广、普及之快也是大家始料未及的,也从没有一种技术能像网络一样日新月异,并迅速地改变着我们的学习和生活方式。因特网大大缩小了时空界限,为我们提供了快捷方便的交流途径。在未来10年内,计算机又将会有怎样飞速的发展呢?在互联网上进行医疗诊断、远程教学、电子商务、视频会议等活动已经实现,未来的互联网的传输速率将会提高100倍,大家可以随时随地连接到因特网上,更方便地进行交流、沟通和开展商务活动。
  • 中文版AutoCAD2011基础与应用案例教程

    中文版AutoCAD2011基础与应用案例教程

    本书采用项目教学方式,通过大量案例全面介绍了AutoCAD2011软件的功能和应用技巧。全书共分8个项目,内容涵盖AutoCAD2011基本操作,绘制与编辑图形,标注尺寸,添加文字注释与应用表格,创建与应用块,绘制与编辑三维图形,图形输出等。
  • 中国网络传播研究2009(第三辑)

    中国网络传播研究2009(第三辑)

    本文以传统社区研究的“场域论”为基础,探讨网络传播中场域性互动对社会舆论的影响。文章首先从传统社区传播的场域性特征出发,探讨网络传播的社区性和场域性。然后分别分析了传统门户、BBS论坛和私人博客等三种主流的网络传播的场域性互动、意见表达和舆论形成的特点。最后结合“张殊凡事件”、“王石捐款”事件以及“黑砖窑”事件,探讨网络传播中的场域性互动对社会舆论从虚拟到现实的影响。
  • 《Internet实用技术》作业集

    《Internet实用技术》作业集

    随着计算机应用的普及和社会信息化水平的提高,Internet已走进我们的生活。《Internet实用技术》这门课将带领我们走进网络的神秘殿堂,让我们认识网络,了解网络,进而学会使用网络,维护网络。其范围涵盖了在授课过程中所讲授的内容,题型多样,内容丰富,并附有两套模拟题,最后附有答案。学生可按照课程进度做习题来巩固和掌握知识。本作业集由李琳编写,由西北工业大学网络教育学院负责组稿和审定。因为时间仓促,水平有限,错误和不当之处在所难免,敬请读者批评指正。
热门推荐
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 奥特战士星光初记

    奥特战士星光初记

    他本是神秘星域中陨石诞生的宇宙之子,却在幼年遭到如此浩劫……他究竟是暗还是光??欢迎各位前来收看此系列作品,这是本人的第一部作品,如有不足,请各位斧正,这是我预想的系列篇的第一部,此系列含有星际,未来,历史,奥特战士,军事,都市,爱情等因素……
  • 仅存的王

    仅存的王

    原先只是一名默默无闻的大学生,一朝穿越至武斗大陆,原先手无缚鸡之力,穿越后拥有了传奇实力,在这片大陆中成为–传奇之王
  • 女王重生在现代

    女王重生在现代

    欧曦羽,欧家养女,性格天真、善良、纯洁的像一张白纸、智商高达300。十六岁毕业京城国防大学枪械制造系。十六岁之前她是欧家的小公主,十六岁后她遭陷害被赶出欧家,最终死于非命。她异界王者,被自己的爱人背叛重生在现在欧曦羽身上。当她变成她,商业、军队……一颗粹灿的新星升起。简介无能,请看文!
  • 半缘落暮半缘君

    半缘落暮半缘君

    九灵界:不可避免的狐仙大战中,狐族知名的废柴她竟然一步登仙,成为传世的灵物——玄月玉狐。他是万俟仙,是九灵界不可超越的存在。当她受尽生不如死之苦时,他不离不弃;当她承受剔仙之苦被人带走,他却抛弃一切只为寻回朝思暮想的她;当她倍受邪术反噬,他只求她一切安好。她叫落小暮,当他万箭穿心,她却无能为力;当他走火入魔,她便永远站在远处等他回头;当他即将长眠,她却用自己性命换取他的长存。这是她欠他的......--------------------君生我未生,我生君已老。君恨我生迟,我恨君生早。月明屋下,只求能永伴石墓下长眠的君,流下清清泪,永伴君三世。【繁华落幕】
  • 妖孽鬼畜要人命

    妖孽鬼畜要人命

    因为一场连环车祸,她不甘死去。在醒来时已身在妖界成了七尾狐妖!?不知身份的清冷谪仙,迷雾重重的腹黑妖孽。这一切仿佛早就注定一般,只等着她落入陷阱?莫名其妙成了什么宿主,一旦被那中二妖孽厌恶很可能就是她穿越之行的结束!开什么玩笑!好不容易有了重生的机会,她怎么可能白白让那妖孽控制?但是……啧,因为是宿主所以自己的想法和所做的事他都能知道。这种设定根本就是犯规!
  • scp基金会收容所

    scp基金会收容所

    这里,是基金会,我是2333,我不知道我真正的名字,我也不知道我在哪,在这恐怖的地方,有着很多恐怖的怪物,是生,是死,我也不知道……
  • 金手指我多的是

    金手指我多的是

    系统?随身空间?位面?出来吧我的魔女仆从!!一个普通的大学新生,武诚正在打着晋级赛,却意外穿越到一个陌生的修真世界......在一路的冒险之中,获得一个个地球的线索,这让他重新燃起了返回地球的希望。他究竟能否修成大道重返地球.......17+本书内有可能包含打斗暴力等内容,17岁以下请自觉退出。
  • 器炼星空

    器炼星空

    一个靠捡垃圾打铁为生,拼命想活下去的少年,顽强的挣扎在这以实力为尊的大陆上,手持残剑,逆流而上,若有一日我石峰扶摇而上九千里,必当踩死那些曾经践踏我的人,即使是头顶这片苍穹星空,也要将其焚灭炼化!
  • 九死轮回咒

    九死轮回咒

    一代高人,为了地府安宁,千百万鬼魂可以投胎,牺牲自己,却在轮回路上遭遇报复,中离奇诅咒,轮回九世,前八世都惨死,拼尽最后的希望,第九世却气运附身,都市收鬼,且看他如何成为一代高手,斩妖灭鬼。