迭代器模式
定义
Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节
迭代器模式示意图
流程
创建一个容器,用来存储元素
创建一个迭代器,用来迭代容器中的对象
最终通过迭代器,我们能将容器中的所有对象迭代出来
代码实现
准备
我们现在模拟map容器的元素迭代。
迭代器
抽象迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 package org.example.iterator;public interface Iterator { public boolean hasNext () ; public Object next () ; public boolean remove () ; }
具体迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 package org.example.iterator;import java.util.Vector;public class ConcreteIterator implements Iterator { private Vector vector = new Vector() ; public int cursor = 0 ; public ConcreteIterator (Vector vector) { this .vector = vector ; } @Override public boolean hasNext () { if (this .cursor == this .vector.size()){ return false ; }else { return true ; } } @Override public Object next () { Object result = null ; if (this .hasNext()){ result = this .vector.get(this .cursor++) ; }else { result = null ; } return result ; } @Override public boolean remove () { this .vector.remove(this .cursor); return true ; } }
容器
抽象容器
1 2 3 4 5 6 7 8 9 10 11 12 13 package org.example.iterator;public interface Aggregate { public void add (Object object) ; public void remove (Object object) ; public Iterator iterator () ; }
具体容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package org.example.iterator;import java.util.Vector;public class ConcreteAggregate implements Aggregate { private Vector vector = new Vector() ; @Override public void add (Object object) { this .vector.add(object); } @Override public void remove (Object object) { this .vector.remove(object); } @Override public Iterator iterator () { return new ConcreteIterator(vector); } }
场景实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public class App { public static void main (String[] args) { ConcreteAggregate aggregate = new ConcreteAggregate(); aggregate.add("a" ); aggregate.add("b" ); aggregate.add("c" ); Iterator iterator = aggregate.iterator(); while (iterator.hasNext()){ Object next = iterator.next(); System.out.println(next); } } }
应用场景
迭代器模式应用的非常普遍,比如java里面的list,map等容器都用迭代器模式来迭代元素。迭代模式已经成为开发中最普遍的工具。
在java开发中,直接用java提供的Iterator久可以满足我们的迭代器模式的需求。