首页 > 代码库 > 迭代器模式
迭代器模式
今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所以在我们实现迭代器模式的时候实际上就是在实现一个迭代器类。
我们先来了解何为迭代器?其实你把它简单理解为for循环也没什么问题,可以说是它是for循环的高级形式。它提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。我们为它提供开始、下一个、是否结束等方法。
定义一个迭代器接口,包含以下方法。
1 package day_28_iterator; 2 3 /** 4 * 迭代器接口 5 * @author turbo 6 * 7 * 2016年9月29日 8 */ 9 public interface Iterator {10 Object first(); //第一个元素11 Object next(); //下一个元素12 boolean isFinished(); //是否到结尾13 Object currentItem(); //当前遍历的对象14 }
具体的迭代器类。
1 package day_28_iterator; 2 3 import java.util.Vector; 4 5 /** 6 * 具体迭代器类 7 * @author turbo 8 * 9 * 2016年9月29日10 */11 public class ConcreteIterator implements Iterator {12 private int currentIndex = 0;13 private Vector vector = null;14 15 public ConcreteIterator(Vector vector){16 this.vector = vector;17 }18 19 /* (non-Javadoc)20 * @see day_28_iterator.Iterator#first()21 */22 @Override23 public Object first() {24 currentIndex = 0;25 return vector.get(currentIndex);26 }27 28 /* (non-Javadoc)29 * @see day_28_iterator.Iterator#next()30 */31 @Override32 public Object next() {33 return vector.get(currentIndex++);34 }35 36 /* (non-Javadoc)37 * @see day_28_iterator.Iterator#isFinished()38 */39 @Override40 public boolean isFinished() {41 if (currentIndex > this.vector.size() - 1){42 return true;43 } else {44 return false;45 }46 }47 48 /* (non-Javadoc)49 * @see day_28_iterator.Iterator#currentItem()50 */51 @Override52 public Object currentItem() {53 return currentIndex;54 }55 56 }
定义一个聚合类接口,用来模拟集合。
1 package day_28_iterator; 2 3 /** 4 * 聚集(集合)接口,模拟集合接口,增删 5 * @author turbo 6 * 7 * 2016年9月29日 8 */ 9 public interface Aggregate {10 Iterator createIterator(); //创建迭代器11 void add(Object obj); //新增元素12 void remove(Object obj); //删除元素13 }
1 package day_28_iterator; 2 3 import java.util.Vector; 4 5 /** 6 * 具体聚集类 7 * @author turbo 8 * 9 * 2016年9月29日10 */11 public class ConcreteAggregate implements Aggregate {12 private Vector vector = null;13 14 public void setVector(Vector vector) {15 this.vector = vector;16 }17 public Vector getVector() {18 return vector;19 }20 21 public ConcreteAggregate(){22 vector = new Vector();23 }24 25 /* (non-Javadoc)26 * @see day_28_iterator.Aggregate#createIterator()27 */28 @Override29 public Iterator createIterator() {30 return new ConcreteIterator(vector);31 }32 /* (non-Javadoc)33 * @see day_28_iterator.Aggregate#add(java.lang.Object)34 */35 @Override36 public void add(Object obj) {37 this.vector.add(obj);38 }39 /* (non-Javadoc)40 * @see day_28_iterator.Aggregate#remove(java.lang.Object)41 */42 @Override43 public void remove(Object obj) {44 this.vector.remove(obj);45 }46 47 }
我们来看看客户端。
1 package day_28_iterator; 2 3 /** 4 * @author turbo 5 * 6 * 2016年9月29日 7 */ 8 public class Main { 9 10 /**11 * @param args12 */13 public static void main(String[] args) {14 Aggregate agg = new ConcreteAggregate();15 agg.add("a");16 agg.add("b");17 agg.add("c");18 Iterator iterator = agg.createIterator();19 while (!iterator.isFinished()){20 System.out.println(iterator.next());21 }22 23 }24 25 }
这样我们就简单的实现了一个迭代器,当需要对聚集(集合)有多种方式遍历时,可以考虑用迭代器模式,在下一篇中,我们会去JDK源代码看看Java是如何实现Iterator迭代器类的。
迭代器模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。