快速业务通道

深入浅出Java设计模式之迭代器模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
代器角色,仅仅定义了遍历接口 public interface Iterator { boolean hasNext(); Object next(); void remove(); } public abstract class AbstractList extends AbstractCollection   implements List { …… //这个便是负责创建具体迭代器角色的工厂方法 public Iterator iterator() { return new Itr(); } //作为内部类的具体迭代器角色 private class Itr implements Iterator { int cursor = 0; int lastRet = -1; int expectedModCount = modCount; public boolean hasNext() { return cursor != size(); } public Object next() { checkForComodification(); try { Object next = get(cursor); lastRet = cursor++; return next; } catch(IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } public void remove() { if (lastRet == -1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch(IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } }

至于迭代器模式的使用。正如引言中所列那样,客户程序要先得到具体容器角色,然后再通过具体容器角色得到具体迭代器角色。这样便可以使用具体迭代器角色来遍历容器了……

深入浅出Java设计模式之迭代器模式(3)

时间:2010-09-22

四、实现自己的迭代器

在实现自己的迭代器的时候,一般要操作的容器有支持的接口才可以。而且我们还要注意以下问题:

在迭代器遍历的过程中,通过该迭代器进行容器元素的增减操作是否安全呢?

在容器中存在复合对象的情况,迭代器怎样才能支持深层遍历和多种遍历呢?

以上两个问题对于不同结构的容器角色,各不相同,值得考虑。

五、适用情况

由上面的讲述,我们可以看出迭代器模式给容器的应用带来以下好处:

1)支持以不同的方式遍历一个容器角色。根据实现方式的不同,效果上会有差别。

2)简化了容器的接口。但是在java Collection中为了提高可扩展性,容器还是提供了遍历的接口。

3)对同一个容器对象,可以同时进行多个遍历。因为遍历状态是保存在每一个迭代器对象中的。

由此也能得出迭代器模式的适用范围:

1)访问一个容器对象的内容而无需暴露它的内部表示。

2)支持对容器对象的多种遍历。

3)为遍历不同的容器结构提供一个统一的接口(多态迭代)。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号