相信Java中的Iterator很多人都用过,而本文却不是介绍Iterator的,
而是介绍Iterator中用到的迭代器模式。
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,
而又不暴露该对象的内部表示。
一个聚集对象,而不管这些对象是什么都需要遍历的时候,你就应该考虑用
迭代器模式。
下面看看类图吧:
类图结构还是比较简单的,左边两个
Aggregate:聚集的抽象父类,用于定义规范
ConcreteAggregate:聚集的实际实现类
右边两个
Iterator:迭代器的抽象类,用于定义相关方法。
ConcreteIterator:具体的迭代器实现类。
下面看类代码:
Iterator类:
package com.blog.anla.Iterator;
/**
* 迭代器抽象类,用于定义开始对象,得到下一个对象,判断是否到尾等
* 抽象方法
* @author U-ANLA
*
*/
public abstract class Iterator {
public abstract Object first();
public abstract Object next();
public abstract boolean isOver();
public abstract Object currentItem();
}
Aggregate类:
package com.blog.anla.Iterator;
/**
* 聚集抽象类
* @author U-ANLA
*
*/
public abstract class Aggregate {
public abstract Iterator createIterator();
}
ConcreteIterator类:
package com.blog.anla.Iterator;
/**
* 具体的迭代器
* @author U-ANLA
*
*/
public class ConcreteIterator extends Iterator{
private ConcreteAggregate aggregate;
private int current = 0;
public ConcreteIterator(ConcreteAggregate aggregate){
this.aggregate = aggregate;
}
@Override
public Object first() {
return aggregate.getItems().get(0);
}
@Override
public Object next() {
Object ret = null;
current++;
if(current < aggregate.count()){
ret = aggregate.getItems().get(current);
}
return ret;
}
@Override
public boolean isOver() {
return current >= aggregate.count() ? true : false;
}
@Override
public Object currentItem() {
return aggregate.getItems().get(current);
}
}
ConcreteAggregate类:
package com.blog.anla.Iterator;
import java.util.ArrayList;
import java.util.List;
/**
* 具体的待遍历的类
* @author U-ANLA
*
*/
public class ConcreteAggregate extends Aggregate {
private List<Object> items = new ArrayList<Object>();
@Override
public Iterator createIterator() {
return new ConcreteIterator(this);
}
public int count(){
return items.size();
}
public List<Object> getItems() {
return items;
}
public void setItems(List<Object> items) {
this.items = items;
}
}
有木有看完这篇一起去看看Java中Iterator实现原理呢?
赠人玫瑰手留余香(oo)