数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

详解Java设计模式——迭代器模式

来源:脚本之家  责任编辑:小易  

迭代子模式

顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:

这个思路和我们常用的一模一样,MyCollection中定义了集合的一些操作,MyIterator中定义了一系列迭代操作,且持有Collection实例,我们来看看实现代码:
两个接口:

public interface Collection { 
 
 public Iterator iterator(); 
 
 /*取得集合元素*/ 
 public Object get(int i); 
 
 /*取得集合大小*/ 
 public int size(); 
} 
public interface Iterator { 
 //前移 
 public Object previous(); 
 
 //后移 
 public Object next(); 
 public boolean hasNext(); 
 
 //取得第一个元素 
 public Object first(); 
} 

两个实现:

public class MyCollection implements Collection { 
 
 public String string[] = {"A","B","C","D","E"}; 
 @Override 
 public Iterator iterator() { 
 return new MyIterator(this); 
 } 
 
 @Override 
 public Object get(int i) { 
 return string[i]; 
 } 
 
 @Override 
 public int size() { 
 return string.length; 
 } 
} 
public class MyIterator implements Iterator { 
 
 private Collection collection; 
 private int pos = -1; 
 
 public MyIterator(Collection collection){ 
 this.collection = collection; 
 } 
 
 @Override 
 public Object previous() { 
 if(pos > 0){ 
 pos--; 
 } 
 return collection.get(pos); 
 } 
 
 @Override 
 public Object next() { 
 if(pos<collection.size()-1){ 
 pos++; 
 } 
 return collection.get(pos); 
 } 
 
 @Override 
 public boolean hasNext() { 
 if(pos<collection.size()-1){ 
 return true; 
 }else{ 
 return false; 
 } 
 } 
 
 @Override 
 public Object first() { 
 pos = 0; 
 return collection.get(pos); 
 } 
 
} 

测试类:

public class Test { 
 
 public static void main(String[] args) { 
 Collection collection = new MyCollection(); 
 Iterator it = collection.iterator(); 
 
 while(it.hasNext()){ 
 System.out.println(it.next()); 
 } 
 } 
} 

此处我们貌似模拟了一个集合类的过程,感觉是不是很爽?其实JDK中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!

介绍
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。

主要解决:不同的方式来遍历整个整合对象。

何时使用:遍历一个聚合对象。

如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。

关键代码:定义接口:hasNext, next。

应用实例:JAVA 中的 iterator。

优点:

1、它支持以不同的方式遍历一个聚合对象。

2、迭代器简化了聚合类。

3、在同一个聚合上可以有多个遍历。

4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

使用场景:

1、访问一个聚合对象的内容而无须暴露它的内部表示。

2、需要为聚合对象提供多种遍历方式。

3、为遍历不同的聚合结构提供一个统一的接口。

注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。

以上所述是小编给大家介绍的Java设计模式——迭代器模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:


  • 本文相关:
  • java 中迭代器的使用方法详解
  • java 迭代器模式实例详解
  • java实现的自定义迭代器功能示例
  • 详解java中的迭代迭代器iterator与枚举器enumeration
  • java集合迭代器iterator中的remove陷阱
  • java将对象写入文件读出_序列化与反序列化的实例
  • 使用socket进行服务端与客户端传文件的方法
  • java中arraylist与linkedlist对比详情
  • mybatis中多对多关系的映射和查询
  • java 的 filefilter文件过滤与readline读行操作实例代码
  • springboot整合swagger的方法示例
  • 项目管理利器-maven(windows安装)图文教程
  • 一次因hashset引起的并发问题详解
  • java的mybatis框架中xml映射缓存的使用教程
  • java switch语句使用注意的四大细节
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved