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

  

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

  

类型:行为类模式

  

类图:   

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

  

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

        公共静态空白打印(收集coll) {   它=coll.iterator Iterator ();   而(it.hasNext ()) {   字符串str=(字符串)it.next ();   System.out.println (str);   }   }      

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

  

  

& # 61623;抽象容器:一般是一个接口,提供一个iterator()方法,例如java中收集的接口,列表接口,套接口等。

  

& # 61623;具体容器:就是抽象容器的具体实现类,比如列表接口的有序列表实现ArrayList,列表接口的链表实现LinkList,套接口的哈希列表的实现HashSet等。

  

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

  

& # 61623;迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代只
  

  

代码实现

        界面迭代器{   公共对象next ();   公共布尔hasNext ();   }   类ConcreteIterator实现迭代器{   私人列表列表=new ArrayList ();   私人int光标=0;   公共ConcreteIterator列表(列表){   这一点。列表=;   }   公共布尔hasNext () {   如果光标==list.size ()) {   返回错误;   }   返回true;   }   公共对象next () {   对象obj=零;   如果(this.hasNext ()) {   光标obj=this.list.get (+ +);   }   返回obj;   }   }   界面聚合{   公共空间添加(对象obj);   公共空间删除(对象obj);   公共迭代器Iterator ();   }   类ConcreteAggregate实现总{   私人列表列表=new ArrayList ();   公共空间添加(对象obj) {   list.add (obj);   }      公共迭代器Iterator () {   返回新ConcreteIterator(列表);   }      公共空间删除(对象obj) {   list.remove (obj);   }   }   公共类客户{   公共静态void main (String [] args) {   总ag)=new ConcreteAggregate ();   ag.add(“小明”);   ag.add(“小红”);   ag.add(“小刚”);   它=ag.iterator Iterator ();   而(it.hasNext ()) {   字符串str=(字符串)it.next ();   System.out.println (str);   }   }   }      

,,,,,,上面的代码中,聚合是容器类接口,大家可以想象一下收集、列表、设置等,总就是他们的简化版,容器类接口中主要有三个方法:添加对象方法添加、删除对象方法删除取得迭代器方法iterator.Iterator是迭代器接口,主要有两个方法:取得迭代对象方法,判断是否迭代完成方法hasNext,大家可以对比并不知道和java.util.Iterator两个接口自行思考只
  

  

  

,,,,,,,<强>迭代器模式的优点有:

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

,,,,,,,<强>迭代器模式的缺点:

  

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