博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迭代设计模式
阅读量:6603 次
发布时间:2019-06-24

本文共 1194 字,大约阅读时间需要 3 分钟。

hot3.png

1、又叫游标(Cursor)模式,是对象的行为模式

  • 迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象
  • 聚集依赖于聚集结构的抽象化,具有复杂化和多样性
  • 数组就是最基本的聚集,也是其他的JAVA聚集对象的设计基础
  • JAVA聚集对象是实现了共同的java.util.Collection接口的对象,是JAVA语言对聚集概念的直接支持
  • JAVA语言提供了很多种聚集,包括Vector、ArrayList、HashSet、HashMap、Hashtable等,这些都是JAVA聚集的例子

2、迭代子模式的结构

  • 白箱聚集与外禀迭代子
  • 黑箱聚集于内禀迭代子

白箱聚集与外禀迭代子

  • 如果一个聚集的接口提供了可以用来修改聚集元素的方法,这个接口就是所谓的宽接口
  • 这样会破坏对聚集对象的封装。这种提供宽接口的聚集叫做白箱聚集

cf567b4dd7c6a1637db0bb539e6fcb5fa78.jpg

  • 由于聚集自己实现迭代逻辑,并向外部提供适当的接口,使得迭代子可以从外部控制聚集元素的迭代过程
  • 这样一来迭代子所控制的仅仅是一个游标而已,这种迭代子叫做游标迭代子(Cursor Iterator)
  • 由于迭代子是在聚集结构之外的,因此这样的迭代子又叫做外禀迭代子(Extrinsic Iterator)

4c017d53e85fe062ee188a07c81f1fc06b6.jpg

  • 客户端代码

f7533961ca247a22ad93beb010c607c2ff2.jpg

黑箱聚集与内禀迭代子

  • 如果一个聚集的接口没有提供修改聚集元素的方法,这样的接口就是所谓的窄接口

978e0f43d3afd95ede57ce2382f3d2dc251.jpg

dc3e8f9f8f84e8e6edd53ad93ee4da20be7.jpg

  • 客户端代码

1777c3648df074b345decf5f5101b36c575.jpg

主动迭代子和被动迭代子

  • 所谓主动(外部)迭代子,指的是由客户端来控制迭代下一个元素的步骤,客户端会明显调用迭代子的next()等迭代方法
  • 所谓被动(内部)迭代子,指的是由迭代子自己来控制迭代下一个元素的步骤
  • 总体来说外部迭代器比内部迭代器要灵活一些,因此我们常见的实现多属于主动迭代子

静态迭代子和动态迭代子

  • 静态迭代子由聚集对象创建,并持有聚集对象的一份快照(snapshot),在产生后这个快照的内容就不再变化
  • 动态迭代子则与静态迭代子完全相反,在迭代子被产生之后,迭代子保持着对聚集元素的引用

3、完整的动态迭代子不容易实现,但是简化的动态迭代子并不难实现

Fail Fast

  • JAVA语言以接口java.util.Iterator的方式支持迭代子模式
  • Collection接口要求提供iterator()方法,此方法在调用时返还一个Iterator类型的对象
  • 作为Collection接口的子类型,AbstractList类的内部成员类Itr便是实现Iterator接口的类

迭代子模式的优点

  • 迭代子模式简化了聚集的接口。迭代子具备了一个遍历接口,这样聚集的接口就不必具备遍历接口
  • 每一个聚集对象都可以有一个或多个迭代子对象,每一个迭代子的迭代状态可以是彼此独立的
  • 由于遍历算法被封装在迭代子角色里面,因此迭代的算法可以独立于聚集角色变化

转载于:https://my.oschina.net/u/3847203/blog/1840740

你可能感兴趣的文章
Ext Js简单常用对象的创建使用
查看>>
ARR2.5 配置反向代理
查看>>
hdfs的FileSystem实例化
查看>>
uva 10878 - Decode the tape
查看>>
如何在列表,字典,集合中根据条件筛选数据
查看>>
js 随机数 转 http://www.cnblogs.com/banbu/archive/2012/07/25/2607880.html
查看>>
关于angular自定义组件在外面使用的时候异步的拉取数据传递给组件的问题
查看>>
hausaufgabe--python 17- Function definition
查看>>
【JOISC2019|2019】【20190622】cake3
查看>>
react(二)
查看>>
简单测试java - properties
查看>>
js中sort()方法的用法,参数以及排序原理
查看>>
对 set statistics time on的两个执行时间权威解释
查看>>
python print的用法
查看>>
JavaScript Math.abs() 函数
查看>>
过滤器 自定义查询
查看>>
格式化输出,%n.m
查看>>
Linux那些让你虎躯一震的命令
查看>>
ethereum/EIPs-1077 Executable Signed Messages
查看>>
跑步圣经(来自樊登读书会)
查看>>