资讯专栏INFORMATION COLUMN

每天一个设计模式·迭代器模式

沈俭 / 752人阅读

摘要:迭代器模式原文地址更多设计模式系列教程更多免费教程博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。迭代器模式常见和常用的有内部迭代器外部迭代器倒序迭代器等等。

迭代器模式·原文地址

更多《设计模式系列教程》

更多免费教程

</>复制代码

  1. 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript靠这吃饭)和python纯粹喜欢)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)
0. 项目地址

迭代器模式源码:https://github.com/dongyuanxin/design-pattern-demos/tree/master/iterator_pattern

《每天一个设计模式》系列:摘要地址

1. 什么是迭代器模式?

</>复制代码

  1. 迭代器模式是指提供一种方法顺序访问一个集合对象的各个元素,使用者不需要了解集合对象的底层实现。

迭代器模式常见和常用的有:内部迭代器、外部迭代器、倒序迭代器等等。

2. 内部迭代器和外部迭代器

内部迭代器:封装的方法完全接手迭代过程,外部只需要一次调用。

外部迭代器:用户必须显式地请求迭代下一元素。熟悉C++的朋友,可以类比C++内置对象的迭代器的 end()next()等方法。

3. 代码实现 3.1 python3 实现

python3的迭代器可以用作for()循环和next()方法的对象。同时,在实现迭代器的时候,可以在借助生成器yield。python会生成传给yeild的值。

</>复制代码

  1. def my_iter():
  2. yield 0, "first"
  3. yield 1, "second"
  4. yield 2, "third"
  5. if __name__ == "__main__":
  6. # 方法1: Iterator可以用for循环
  7. for (index, item) in my_iter():
  8. print("At", index , "is", item)
  9. # 方法2: Iterator可以用next()来计算
  10. # 需要借助 StopIteration 来终止循环
  11. _iter = iter(my_iter())
  12. while True:
  13. try:
  14. index,item = next(_iter)
  15. print("At", index , "is", item)
  16. except StopIteration:
  17. break
3.2 ES6 实现

这里实现的是一个外部迭代器。需要实现边界判断函数、元素获取函数和更新索引函数。

</>复制代码

  1. const Iterator = obj => {
  2. let current = 0;
  3. let next = () => current += 1;
  4. let end = () => current >= obj.length;
  5. let get = () => obj[current];
  6. return {
  7. next,
  8. end,
  9. get
  10. }
  11. }
  12. let myIter = Iterator([1, 2, 3]);
  13. while(!myIter.end()) {
  14. console.log(myIter.get())
  15. myIter.next();
  16. }
4. 参考资料

python迭代器

《JavaScript 设计模式和开发实践》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99504.html

相关文章

  • 每天一个设计模式·迭代模式

    摘要:迭代器模式原文地址更多设计模式系列教程更多免费教程博主按每天一个设计模式旨在初步领会设计模式的精髓,目前采用靠这吃饭和纯粹喜欢两种语言实现。迭代器模式常见和常用的有内部迭代器外部迭代器倒序迭代器等等。 迭代器模式·原文地址 更多《设计模式系列教程》 更多免费教程 博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript(靠这吃饭)和python(纯粹喜欢...

    newsning 评论0 收藏0
  • ES6-前世今生(0)

    摘要:更新了个版本,最新正式版是语言的下一代标准,早已在年月正式发布。基本不支持移动端浏览器对的支持情况版起便可以支持的新特性。比较通用的工具方案有,,,等。 1、ECMAScript是什么? 和 JavaScript 有着怎样的关系? 1996 年 11 月,Netscape 创造了javascript并将其提交给了标准化组织 ECMA,次年,ECMA 发布 262 号标准文件(ECMA-...

    LeviDing 评论0 收藏0
  • 每天一个设计模式之装饰者模式

    摘要:作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用和两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式原文地址是每天一个设计模式之装饰者模式欢迎关注个人技术博客。 作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式...

    brianway 评论0 收藏0
  • 每天一个设计模式之装饰者模式

    摘要:作者按每天一个设计模式旨在初步领会设计模式的精髓,目前采用和两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式原文地址是每天一个设计模式之装饰者模式欢迎关注个人技术博客。 作者按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式...

    shleyZ 评论0 收藏0

发表评论

0条评论

沈俭

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<