迭代器必须要知道的事情
2016-02-25 00:00
253 查看
摘要: 为什么使用,以及怎么使用迭代器做了一些个人看法的表述
迭代器必须要知道的事情
迭代器模式设计的UML图:
我们可以从UML设计图中可以看出:迭代器的场景,对一个集合进行遍历。在只看到遍历的时候很多同学就会说,“强行设计一个遍历的方式,直接用for,加getElement(i)不就搞定了”。但很多时候在设计框架结构的时候,绝对不会只有Arrays<E>这样一个集合类对不?Arrays<E>需要getArray(i),那Lists<E>是不是就需要getList(i),很多时候设计讲究一种对称美,这个时候我们就会思考有没有那么一种可能,两种集合类型获取元素的方式可以一致,这个时候我们遍历同类型集合的时候就非常对称,优雅。
我们对比上述情况就发现迭代器,其实做到了一种极其优雅对称的方式。
第二个为什要写的原因就是降低耦合度:很多同学英语不好,集合里面的变量命名不规范,假设已经写好一个功能代码遍历用的是for,getShuZu(i);这个时候突然想起来数组的英语该怎么写了,是不是功能代码全部都得该成for,getArray(i)(这个功能是指提供给其他人使用的功能哈),如果是用迭代器模式,是不是只用该迭代器里面的名字,根本不用告诉用了我遍历的同学说我改成了什么,不然你不能用了之类的话。
总结一下:我们用迭代器不是为了强行秀实力,而是对整体框架的把握上使用,对称在设计的时候是最优雅的方式之一。不过我的这个迭代器模式里面没有考虑多线程的情况,后面在《多线程里面必须知道的事情》系列文章专门总结。
迭代器必须要知道的事情
迭代器模式设计的UML图:
我们可以从UML设计图中可以看出:迭代器的场景,对一个集合进行遍历。在只看到遍历的时候很多同学就会说,“强行设计一个遍历的方式,直接用for,加getElement(i)不就搞定了”。但很多时候在设计框架结构的时候,绝对不会只有Arrays<E>这样一个集合类对不?Arrays<E>需要getArray(i),那Lists<E>是不是就需要getList(i),很多时候设计讲究一种对称美,这个时候我们就会思考有没有那么一种可能,两种集合类型获取元素的方式可以一致,这个时候我们遍历同类型集合的时候就非常对称,优雅。
对比一下: Arrays<String> arrays = new Arrays<String>(10); Lists<String>lists=new Lists<String>(10); //遍历方式1 for(int i=0;i<arrays.size();i++){ arrays.getArray(i); } for(int i=0;i<lists.size();i++){ lists.getList(i); } //遍历方式2 Iterator<String> iterator=arrays.iterator(); while(iterator.hasNext()){ iterator.next(); } iterator=lists.iterator(); while(iterator.hasNext()){ iterator.next(); }
我们对比上述情况就发现迭代器,其实做到了一种极其优雅对称的方式。
第二个为什要写的原因就是降低耦合度:很多同学英语不好,集合里面的变量命名不规范,假设已经写好一个功能代码遍历用的是for,getShuZu(i);这个时候突然想起来数组的英语该怎么写了,是不是功能代码全部都得该成for,getArray(i)(这个功能是指提供给其他人使用的功能哈),如果是用迭代器模式,是不是只用该迭代器里面的名字,根本不用告诉用了我遍历的同学说我改成了什么,不然你不能用了之类的话。
总结一下:我们用迭代器不是为了强行秀实力,而是对整体框架的把握上使用,对称在设计的时候是最优雅的方式之一。不过我的这个迭代器模式里面没有考虑多线程的情况,后面在《多线程里面必须知道的事情》系列文章专门总结。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之行为型模式 - 调用行为的传递问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 文件遍历排序函数
- Ruby中的迭代器详解
- Ruby中Block和迭代器的使用讲解
- Lua 学习笔记之C API 遍历 Table实现代码
- Lua中的迭代器浅析
- Lua中的迭代器和泛型for介绍
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- C#特性-迭代器(上)及一些研究过程中的副产品
- C#迭代器模式(Iterator Pattern)实例教程
- C#遍历文件夹后上传文件夹中所有文件错误案例分析
- 实例解析C#设计模式编程中简单工厂模式的使用