无涯教程-Java 迭代器模式

45 阅读1分钟

迭代器模式是Java和.Net编程环境中非常常用的设计模式。此模式用于获得一种以顺序方式访问集合对象的元素的方式,属于行为模式类别。

迭代器模式实例

无涯教程将创建一个描述导航方法的 Iterator 接口和一个重新运行迭代器的 Container 接口。实现 Container 接口的具体类将负责实现 Iterator 接口并使用它

Iterator Pattern Demo ,演示类将使用 NamesRepository ,这是一个具体的类实现,用于打印以 NamesRepository 。

Iterator Pattern UML Diagram

第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">&lt;</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

参考链接

www.learnfk.com/design-patt…