设计模式之迭代器模式解析学习源码(十八)

原文献上, 点击滴滴滴


迭代器模式(Iterator)定义: 提供一种方法顺序访问聚合对象的各个元素吗而又不暴露该对象的内部展示

不用Iterator的坏处

  • 原文中编写了三个简单的集合 ArraryList HashSet LinkedList 原先是没有实现Iterable 内部没有具体实现iterator
  • 问题1: 遍历的时候遍历了几次
    • 使用数组遍历的时候实际是遍历了两次, 由于System.arrayCopy 和 set的 toArray 看不到源码, 但是LinkedList 可以看到链表遍历了一次, 然后我们再遍历这个数组, 打印
  • 问题2: 如何解决这个问题
    • 可以给 LinkedList ArrayList 加get(index)的方法遍历, 但是HashSet就没法了, 实际上是Map的key集合, 无序的, 实际上这里面linkedList的get 比较麻烦了, 所以有查询的性能的问题
  • 总结: 牛人左哥: "那就用迭代器模式吧"

看迭代器模式与非迭代的UML区别

 

 

  • 很相似, 但迭代器模式有个接口这个概念
  • 遍历对象的区间

迭代器模式有哪些说不上的缺点

  • 具体的集合类与具体的迭代器是绑定的关系, 这种实现方式几乎没有复用的可能, 可以看着是特事特办, 算是把双刃剑, 权衡自己把握

class文件的描述

  • 以前重来都没有去尝试解析
  • 现在先记下
    • invoke 调用 virtual(实现类)方法 interface(接口)方法
    • astore 赋值栈 _33+1个引用变量
    • aload 压入值栈 _33+1个引用变量
    • checkcast 检测类型转换
    • getStatic 获取静态属性
    • ifne 如果返回true就 执行
posted @ 2017-05-10 15:45  hassenli  阅读(216)  评论(0编辑  收藏  举报