迭代器模式是Java和.Net编程环境中非常常用的设计模式。此模式用于获得一种以顺序方式访问集合对象的元素的方式,属于行为模式类别。
迭代器模式实例
无涯教程将创建一个描述导航方法的 Iterator 接口和一个重新运行迭代器的 Container 接口。实现 Container 接口的具体类将负责实现 Iterator 接口并使用它
Iterator Pattern Demo ,演示类将使用 NamesRepository ,这是一个具体的类实现,用于打印以 NamesRepository 。

第1步 - 创建接口。
Iterator.java
public interface Iterator { public boolean hasNext(); public Object next(); }
Container.java
public interface Container { public Iterator getIterator(); }
第2步 - 创建实现 Container 接口的具体类。此类具有实现 Iterator 接口的内部类 NameIterator 。
NameRepository.java
public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
</span><span class="kwd">int</span><span class="pln"> index</span><span class="pun">;</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">boolean</span><span class="pln"> hasNext</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">index </span><span class="pun"><</span><span class="pln"> names</span><span class="pun">.</span><span class="pln">length</span><span class="pun">){</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">Object</span><span class="pln"> </span><span class="kwd">next</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">.</span><span class="pln">hasNext</span><span class="pun">()){</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> names</span><span class="pun">[</span><span class="pln">index</span><span class="pun">++];</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
第3步 - 使用 NameRepository 获取迭代器和打印名称。
IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
</span><span class="kwd">for</span><span class="pun">(</span><span class="typ">Iterator</span><span class="pln"> iter </span><span class="pun">=</span><span class="pln"> namesRepository</span><span class="pun">.</span><span class="pln">getIterator</span><span class="pun">();</span><span class="pln"> iter</span><span class="pun">.</span><span class="pln">hasNext</span><span class="pun">();){</span><span class="pln">
</span><span class="typ">String</span><span class="pln"> name </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">String</span><span class="pun">)</span><span class="pln">iter</span><span class="pun">.</span><span class="kwd">next</span><span class="pun">();</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"Name : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> name</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
第4步 - 验证输出。
Name : Robert Name : John Name : Julie Name : Lora