迭代器模式

canca canca
2007-03-26 15:01
1
0

//迭代器模式
//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;
  }
 }
}

发表评论