迭代器模式

维基百科,自由的百科全书
跳转至: 导航搜索

物件導向程式設計裡,迭代器模式是一種設計模式,是一種最簡單也最常見的設計模式。它可以讓使用者透過特定的介面巡訪容器中的每一個元素而不用了解底層的實作。

此面,也可以實作特定目的版本的迭代器。

介面[编辑]

《設計模式》建議合理的介面該要有:

public interface Iterator
{
    public Object First();
    public Object Next();
    public boolean isDone();
    public Object CurrentItem();
}

示例[编辑]

Java[编辑]

C++[编辑]

Python[编辑]

在 Python 中,迭代器是遵循迭代協議的物件。使用者可以使用 iter() 以從任何序列得到迭代器(如 list, tuple, dictionary, set 等)。另一個方法則是建立一個另一種形式的迭代器 —— generator 。要取得下一個元素,則使用成員函式 next()(Python 2)或函數 next() function (Python 3) 。當沒有元素時,則引發 StopIteration 此例外。若要實作自己的迭代器,則只要實作 next()(Python 2)或 __next__()( Python 3)。

以下為兩個例子:

# 從序列得到
x = [42, "test", -12.34]
it = iter(x)
try:
  while True:
    x = next(it) # 在 Python 2 中,要改成 it.next()
    print x
except StopIteration:
  pass
 
# generator
def foo(n):
  for i in range(n):
    yield i
 
it = foo(5)
try:
  while True:
    x = next(it) # 在 Python 2 中,要改成 it.next()
    print x
except StopIteration:
  pass

問題[编辑]

  • 在巡訪過程中,容器可能會被外部改變。譬如新增或刪除一個元素。

另見[编辑]