Design Pattern -- Iterator

就Java 开发者而言,Iterator 应该是比较容易理解的模式了。 因为用过Java 集合的人会记得有iterator() 这个函数。应用iterator() 返回Iterator 对象,然后对相应的集合元素进行操作,这就是经典的Iterator 的用法。(当然,Iteartor 还涉及另外一个模式,Factory, 这在之前已经讲过)。

在基本的Iterator 模式的定义里是这样讲的:“Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. ” 。 这里有两点:

1。访问聚合的对象( aggregate object),比如集合

2。不暴露内部细节( exposing its underlying representation.)

基本的模式图:

对于这个模式,本身的思想似乎没有什么可说的。但是有几点具体实现还是有必要提一下:

首先是对于Java 开发者,通常可以自定义自己的集合和Iterator 来提前实现集合元素类型转换等操作。在Java 源码中,我们看到通过运用Iterator 和Factory 两种模式,开发者将特定集合类型的Iterator 在该类内作为内部类(inner class) 实现。而当我们开发自己的集合以及Iterator 时,完全也可以这么做

第二,如果自定义记集合内元素是以复合(composite )结构存在的,那么遍历的实现就会有一些复杂。这时的设计可能还要参考Composite 模式的概念。

第三,在Iterate 的过程中,必须关注Thread-Safe 的问题。通常可以通过加互斥锁,或者用Synchronized解决,比如:

list  =  Collections.synchronizedList(sourceList);
synchronized (list){
...
}

(这里还有一个细节,在Java 中,如果用Iterator遍历操作集合元素,发生线程冲突而程序员没有进行处理的话,Java 会抛出ConcurrentModificationException 异常;而如果不用Iterator, 而只是for 循环,即使有线程问题存在异常也不会被抛出。)

总之,对于Java 开发者而言,Iterator 模式在大部分情况下是现成可用的。而如果要自定义进行开发,有些东西就必须小心了。

参考:

http://www.dofactory.com/Patterns/PatternIterator.aspx

http://squall.cs.ntou.edu.tw/cpp/91spring/Iterator.html

http://www.cnblogs.com/singlepine/archive/2005/10/30/265024.html

http://digi.it.sohu.com/20050508/n240036877.shtml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值