迭代子模式(Iterator)
2015-08-27 20:29 你吃不吃麦芽糖 阅读(269) 评论(0) 收藏 举报迭代子(Iterator)模式又叫游标模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。
迭代子模式涉及到以下几个角色:
- 抽象迭代子(Iterator)角色:此抽象角色定义出遍历元素所需的接口。
- 具体迭代子(ConcreteIterator)角色:此角色实现了Iterator接口,并保持迭代过程中的游标位置。
- 聚集(Aggregate)角色:此抽象角色给出创建迭代子(Iterator)对象的接口。
- 具体聚集(ConcreteAggregate)角色:实现了创建迭代子(Iterator)对象的接口,返回一个合适的具体迭代子实例。
- 客户端(Client)角色:持有对聚集及其迭代子对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代子操作聚集元素的增加和删除。
/**
* 抽象迭代子模式
*/
public interface Iterator
{
/*
* 迭代方法:移动到第一个元素
* */
void first();
void next();
boolean isDone();
Object currentItem();
}
/**
* 具体迭代子模式
*/
public class ConcreteIterator implements Iterator
{
private ConcreteAggregate agg;
private int index=0;
private int size=0;
public ConcreteIterator(ConcreteAggregate agg)
{
this.agg=agg;
size=agg.size();
index=0;
}
@Override
public void first() {
index=0;
}
@Override
public void next() {
if(index<size)
{
index++;
}
}
@Override
public boolean isDone() {
return (index>=size);
}
@Override
public Object currentItem() {
return agg.getElement(index);
}
}
/**
* 抽象聚集角色Aggregate
*/
public abstract class Aggregate
{
/*
* 工厂方法:返回一个迭代子对象
* */
public Iterator createIterator()
{
return null;
}
}
/**
* 具体聚集角色
*/
public class ConcreteAggregate extends Aggregate
{
private Object[] objs={"Monk Tang","Monkey","Pigsy","Sandy","Horse"};
public Iterator createIterator()
{
return new ConcreteIterator(this);
}
/*
* 取值方法:向外界提供聚集方法
* */
public Object getElement(int index)
{
if(index<objs.length)
{
return objs[index];
}
else
{
return null;
}
}
public int size()
{
return objs.length;
}
}
public class Client
{
private Iterator it;
private Aggregate agg=new ConcreteAggregate();
public void operation()
{
it=agg.createIterator();
while(!it.isDone())
{
System.out.println(it.currentItem().toString());
it.next();
}
}
public static void main(String[] args) {
Client client=new Client();
client.operation();
}
}
浙公网安备 33010602011771号