迭代器必须要知道的事情

原创
2016/02/25 14:09
阅读数 190

                      迭代器必须要知道的事情

迭代器模式设计的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)(这个功能是指提供给其他人使用的功能哈),如果是用迭代器模式,是不是只用该迭代器里面的名字,根本不用告诉用了我遍历的同学说我改成了什么,不然你不能用了之类的话。

 总结一下:我们用迭代器不是为了强行秀实力,而是对整体框架的把握上使用,对称在设计的时候是最优雅的方式之一。不过我的这个迭代器模式里面没有考虑多线程的情况,后面在《多线程里面必须知道的事情》系列文章专门总结。



展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部