熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

設計模式-行為型-迭代器模式(Iterator)

2013-11-23 19:47:07  來源: Java高級技術 

  概述

  給定一個語言定義它的文法的一種表示並定義一個解釋器這個解釋器使用該表示來解釋語言中的句子

  適用性

  訪問一個聚合對象的內容而無需暴露它的內部表示

  支持對聚合對象的多種遍歷

  為遍歷不同的聚合結構提供一個統一的接口(即支持多態迭代)

  參與者

  Iterator

  迭代器定義訪問和遍歷元素的接口

  ConcreteIterator

  具體迭代器實現迭代器接口

  對該聚合遍歷時跟蹤當前位置

  Aggregate

  聚合定義創建相應迭代器對象的接口

  ConcreteAggregate

  具體聚合實現創建相應迭代器的接口該操作返回ConcreteIterator的一個適當的實例

  類圖

   

  示例代碼:

  package comsqlactioned;

  import javautilArrayList;

  import javautilList;

  /**

  * 迭代器模式 實現示例

  * @author sean

  */

  interface IIterator<T> {

  T next();

  void first();

  void last();

  boolean hasNext();

  }

  class IIteratorImpl<T> implements IIterator<T> {

  private IList<T> list;

  private int index;

  public IIteratorImpl (IList<T> list) {

  index = ;

  thislist = list;

  }

  @Override

  public T next() {

  T t = listget(index);

  index++;

  return t;

  }

  @Override

  public void first() {

  index = ;

  }

  @Override

  public void last() {

  index = listsize();

  }

  @Override

  public boolean hasNext() {

  return index < listsize();

  }

  }

  interface IList<T> {

  IIterator<T> iterator();

  T get(int index);

  int size();

  void add(T obj);

  }

  class IListImpl<T> implements IList<T> {

  private List<T> list;

  private int index;

  public IListImpl() {

  list = new ArrayList<T>();

  index = ;

  }

  @Override

  public IIterator<T> iterator() {

  return new IIteratorImpl<T> (this);

  }

  @Override

  public T get(int index) {

  return listget(index);

  }

  @Override

  public int size() {

  return listsize();

  }

  @Override

  public void add(T obj) {

  listadd(obj);

  }

  }

  public class IteratorTest {

  public static void main(String[] args) {

  // ways of iteration

  IList<String> list = new IListImpl<String>();

  listadd(a);

  listadd(b);

  listadd(c);

  // st way

  Systemoutprintln( using iterator to traverse:);

  IIterator<String> iter = erator();

  while (iterhasNext()) {

  Systemoutprintln(iternext());

  }

  // nd way

  Systemoutprintln( using list to traverse: );

  for (int i=; i<listsize(); i++) {

  Systemoutprintln(listget(i));

  }

  }

  }

  結果:

   using iterator to traverse:

  a

  b

  c

   using list to traverse:

  a

  b

  c


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27448.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.