全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java设计模式之迭代器模式_动力节点Java学院整理

定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

类型:行为类模式

类图:

       如果要问Java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧:

public static void print(Collection coll){ 
 Iterator it = coll.iterator(); 
 while(it.hasNext()){ 
  String str = (String)it.next(); 
  System.out.println(str); 
 } 
} 

        这个方法的作用是循环打印一个字符串集合,里面就用到了迭代器模式,java语言已经完整地实现了迭代器模式,Iterator翻译成汉语就是迭代器的意思。提到迭代器,首先它是与集合相关的,集合也叫聚集、容器等,我们可以将集合看成是一个可以包容对象的容器,例如List,Set,Map,甚至数组都可以叫做集合,而迭代器的作用就是把容器中的对象一个一个地遍历出来。 

迭代器模式的结构

抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。

具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。

抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方法remove(),

迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。 

代码实现

interface Iterator { 
 public Object next(); 
 public boolean hasNext(); 
} 
class ConcreteIterator implements Iterator{ 
 private List list = new ArrayList(); 
 private int cursor =0; 
 public ConcreteIterator(List list){ 
  this.list = list; 
 } 
 public boolean hasNext() { 
  if(cursor==list.size()){ 
   return false; 
  } 
  return true; 
 } 
 public Object next() { 
  Object obj = null; 
  if(this.hasNext()){ 
   obj = this.list.get(cursor++); 
  } 
  return obj; 
 } 
} 
interface Aggregate { 
 public void add(Object obj); 
 public void remove(Object obj); 
 public Iterator iterator(); 
} 
class ConcreteAggregate implements Aggregate { 
 private List list = new ArrayList(); 
 public void add(Object obj) { 
  list.add(obj); 
 } 
 
 public Iterator iterator() { 
  return new ConcreteIterator(list); 
 } 
 
 public void remove(Object obj) { 
  list.remove(obj); 
 } 
} 
public class Client { 
 public static void main(String[] args){ 
  Aggregate ag = new ConcreteAggregate(); 
  ag.add("小明"); 
  ag.add("小红"); 
  ag.add("小刚"); 
  Iterator it = ag.iterator(); 
  while(it.hasNext()){ 
   String str = (String)it.next(); 
   System.out.println(str); 
  } 
 } 
} 

       上面的代码中,Aggregate是容器类接口,大家可以想象一下Collection,List,Set等,Aggregate就是他们的简化版,容器类接口中主要有三个方法:添加对象方法add、删除对象方法remove、取得迭代器方法iterator。Iterator是迭代器接口,主要有两个方法:取得迭代对象方法next,判断是否迭代完成方法hasNext,大家可以对比java.util.List和java.util.Iterator两个接口自行思考。 

迭代器模式的优缺点

        迭代器模式的优点有:

  • 简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。
  • 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。
  • 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

        迭代器模式的缺点:

  • 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合。 

迭代器模式的适用场景

       迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。

       但是,由于容器与迭代器的关系太密切了,所以大多数语言在实现容器的时候都给提供了迭代器,并且这些语言提供的容器和迭代器在绝大多数情况下就可以满足我们的需要,所以现在需要我们自己去实践迭代器模式的场景还是比较少见的,我们只需要使用语言中已有的容器和迭代器就可以了。

总结

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


# java  # 设计模式  # 迭代器模式  # Java设计模式之迭代器模式  # 深入理解Java设计模式之迭代器模式  # Java设计模式之java迭代器模式详解  # 详解Java设计模式——迭代器模式  # 23种设计模式(14)java迭代器模式  # Java使用设计模式中迭代器模式构建项目的代码结构示例  # 使用迭代器模式来进行Java的设计模式编程  # Java设计模式中的迭代器模式详解  # 迭代  # 遍历  # 是一个  # 都有  # 就可以  # 只需要  # 小编  # 自己的  # 判断是否  # 他们的  # 会有  # 就像  # 第一个  # 最多  # 在此  # 两种  # 只需  # 给我们  # 它是  # 我们可以 


相关文章: 简单实现Android验证码  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  建站主机选购指南:核心配置优化与品牌推荐方案  建站之星2.7模板:企业网站建设与h5定制设计专题  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  建站之星后台密码遗忘或太弱?如何重置与强化?  建站VPS能否同时实现高效与安全翻墙?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  PHP 500报错的快速解决方法  安徽网站建设与外贸建站服务专业定制方案  建站之星官网登录失败?如何快速解决?  小程序网站制作需要准备什么资料,如何制作小程序?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站之星代理平台如何选择最佳方案?  孙琪峥织梦建站教程如何优化数据库安全?  如何挑选最适合建站的高性能VPS主机?  Swift开发中switch语句值绑定模式  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在香港服务器上快速搭建免备案网站?  如何在IIS中新建站点并解决端口绑定冲突?  建站之星代理如何获取技术支持?  php json中文编码为null的解决办法  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何通过山东自助建站平台快速注册域名?  c# 在ASP.NET Core中管理和取消后台任务  如何通过万网虚拟主机快速搭建网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何使用Golang安装API文档生成工具_快速生成接口文档  全景视频制作网站有哪些,全景图怎么做成网页?  建站主机空间推荐 高性价比配置与快速部署方案解析  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  建站之星代理费用多少?最新价格详情介绍  如何在IIS7中新建站点?详细步骤解析  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站之星安装后界面空白如何解决?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  购物网站制作公司有哪些,哪个购物网站比较好?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  表情包在线制作网站免费,表情包怎么弄?  浅谈Javascript中的Label语句 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。