深入浅出Java设计模式之迭代器模式 - 编程入门网
代器角色,仅仅定义了遍历接口
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |