净谦

导航

跌代器模式

package behaviroal.iterator;

import java.util.List;
import java.util.Vector;

/**
 * 跌代器模式
 * 迭代器具备一个遍历接口,集合的接口就不必具备遍历接口,简化了集合
 * 每一个集合对象都可以有很多不同的迭代器,这些迭代器彼此独立
 * 遍历的算法封装在迭代器里,因此迭代的算法可以独立于集合单独变化
 *
 * 可以顺序地访问一个集合中的元素而不必暴露集合中的内部表象
 * @author zhangchy
 *
 */

 interface IAggregrate{
  public Iterator createIterator();
 }

 class CreateIaggregrate implements IAggregrate{
  List objectList =  new Vector();
 
  //添加一个元素
  public void addElements(Object o){
   objectList.add(o);
  }
 
  //获得某个索引的值
  public Object getElement(int index){
   return objectList.get(index);
  }
 
  public  int size(){
   return objectList.size();
  }
 
  //获得遍历器
 public Iterator createIterator() {
  // TODO Auto-generated method stub
  return new CreateIterator(this);
 }
 
 }
 
 //遍历器接口
 interface Iterator{
  public void first();
  public void next();
  public Object currentItem();
  public boolean hasNext();
 }

 
 //具体遍历器
 class CreateIterator implements Iterator{
  private  int index = 0;
  private CreateIaggregrate agg;
  public CreateIterator(CreateIaggregrate agg){
   this.agg = agg;
  }
 
 
 public Object currentItem(){
  // TODO Auto-generated method stub
  return agg.getElement(index);
 }

 public void first() {
  // TODO Auto-generated method stub
  index = 0;
 }

 public boolean hasNext() {
  // TODO Auto-generated method stub
  return index<agg.size();
 }

 public void next() {
  // TODO Auto-generated method stub
  index ++;
 }
 }
 
 
public class IteratorPattern {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  CreateIaggregrate agg = new CreateIaggregrate();
  agg.addElements("a");
  agg.addElements("ab");
  agg.addElements("abv");
  agg.addElements("acdb");
  agg.addElements("afbfbfb");
  Iterator it = agg.createIterator();
  
  while(it.hasNext()){
   System.out.println(it.currentItem().toString());
   it.next();
  }
 }

}

posted on 2012-03-15 10:32  康安V  阅读(221)  评论(0)    收藏  举报