同じようなオブジェクトを整列させて管理したいときに使用します。
イメージとしてはLISTに近い。
package org.example.iterator;
public interface Iterator {
public Object next();
public boolean hasNext();
}
package org.example.iterator;
public interface Aggregate {
public Iterator iterator();
}
package org.example.iterator;
public class ConcreteAggregate implements Aggregate{
private Object[] objects;
private int last = 0;
public ConcreteAggregate(int maxSize)
{
this.objects = new Object[maxSize];
}
public void add(Object object)
{
objects[last] = object;
last++;
}
public Object getItem(int index)
{
return objects[index];
}
public int getLast()
{
return last;
}
@Override
public Iterator iterator() {
return new ConcreteIterator(this);
}
}
package org.example.iterator;
public class ConcreteIterator implements Iterator {
private ConcreteAggregate aggregate;
private int index;
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
this.index = 0;
}
@Override
public Object next() {
Object object = aggregate.getItem(index);
index++;
return object;
}
@Override
public boolean hasNext() {
if(index < aggregate.getLast())
{
return true;
}
else
{
return false;
}
}
}
package org.example.iterator;
public class Item {
}
package org.example.iterator;
public class Main {
public static void main(String[] args)
{
ConcreteAggregate aggregate = new ConcreteAggregate(10);
aggregate.add(new Item());
aggregate.add(new Item());
aggregate.add(new Item());
Iterator iterator = aggregate.iterator();
while(iterator.hasNext())
{
Item item = (Item)iterator.next();
}
}
}
まぁ、こんなコード書かなくても、すでにIteratorクラスは実装されているので。
Listのオブジェクトからiterator()で取得することもできます。