迭代器模式
//迭代器模式
//CopyRight(C) CAnca software Office.2006
//Created by CAnca.
import java.util.*;
public class IteratorMode{
public static void main(String[] args){
AbstractCollection collection = new concreteCollection();
collection.add("Canca");
collection.add("Jacky");
collection.add("MIMI");
collection.add("tTing");
collection.add("Honghong");
Iterator iterator = collection.createIterator();
System.out.println("iterator.first() - " + iterator.first());
System.out.println("iterator.last() - " + iterator.last());
System.out.println();
Object item = iterator.first();
while(item != null){
System.out.println(item);
item = iterator.next();
}
}
}
abstract class Iterator{
abstract Object first();
abstract Object next();
abstract Object last();
abstract Object currentItem();
abstract boolean isDone();
}
abstract class AbstractCollection{
protected ArrayList items;
public AbstractCollection(){
items = new ArrayList();
}
abstract Iterator createIterator();
abstract void add(Object item);
abstract int size();
}
class concreteCollection extends AbstractCollection{
public Iterator createIterator(){
return new concreteIterator(this);
}
public void add(Object item){
items.add(item);
}
public int size(){
return items.size();
}
}
class concreteIterator extends Iterator{
AbstractCollection collection = null;
private int current = -1;
public concreteIterator(AbstractCollection collection){
this.collection = collection;
}
public Object first(){
if(!collection.items.isEmpty()){
current = 0;
return collection.items.get(0);
}else{
return null;
}
}
public Object next(){
if(current < collection.items.size() - 1){
return collection.items.get(++current);
}else{
return null;
}
}
public Object last(){
if(!collection.items.isEmpty()){
current = collection.items.size() - 1;
return collection.items.get(current);
}else{
return null;
}
}
public boolean isDone(){
if(current >= collection.items.size() - 1){
return true;
}else{
return false;
}
}
public Object currentItem(){
if(!collection.items.isEmpty()){
if(isDone() || current == -1)
return null;
return collection.items.get(current);
}else{
return null;
}
}
}