提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

在流行语言中,如Java,ruby,js都内置里迭代器。

内部迭代器

如forEach函数,函数内部定义好迭代规则,完全接手整个迭代过程,只需要一次初始调用。

外部迭代器

必须显式请求下一个迭代元素。外部迭代器可以自定义迭代的顺序。这种迭代器需要具备next方法。

举例

为了应对不同的环境,预先实现了所有可能需要的方法,应用时依次尝试这些方法,需要实现一个迭代器方法。

  1. // 这些可迭代的方法应该遵守一些约定,如可用时返回对象,不可以返回false
  2. var iteratorFunc=function(fnAry){
  3. for(var i=0,curFn;curFn=fnAry[i++];){
  4. var res=curFn()
  5. if(res!==false){
  6. return res
  7. }
  8. }
  9. }

目前大多数语言都内置了迭代器,迭代器模式由于太简单,很多时候不被认为是一种设计模式。