迭代器模式定义:
Provide a way to access the elements of an aggregate object sequentially without exposing
its underlying representation.
它提供了一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
迭代器为容器服务,能容纳对象的所有类型都可以称为容器
迭代器模式角色:
1.Iterator抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素;
next()访问下一个元素;idDone()是否已经访问到底部(Java里叫做hasNext()方法)
2.ConcreteIterator具体迭代器
具体迭代器角色要实现迭代器接口,完成容器元素的遍历
3.Aggregate抽象容器
容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似createIterator()这样的方法,在Java
中一般是iterator()方法
4.Concrete Aggregate具体容器
具体容器实现容器接口定义的方法,创建出容纳迭代器的对象
//抽象迭代器 public interface Iterator{ public Object next(); public boolean hasNext(); public boolean remove(); } //具体迭代器 public class ConcreteIterator implements Iterator{ private Vector vector=new Vector(); public int cursor=0; @SuppressWarnings(unchecked) public ConcreteIterator(Vector _vector){ this.vector=_vector; } //判断是否到达尾部 public boolean hasNext(){ if(this.cursor==this.vector.size()){ return false; }else{ return true; } } //判断是否到达尾部 public boolean hasNext(){ if(this.cursor==this.vector.size()){ return false; }else{ return true; } } //返回下一个元素 public Object next(){ Object result=null; if(this.hasNext()){ result=this.vector.get(this.cursor++); }else{ result=null; } return result; } //删除当前元素 public boolean remove(){ this.vector=.remove(this.vector); return true; } } //抽象容器 public interface Aggregate{ public void add(Object object); public void remove(Object object); public Iterator iterator(); } //具体容器 public class ConcreteAggrate implements Aggragate{ private Vector vector=new Vector(); public void add(Object object){ this.vector.add(object); } public Iterator iterator(){ return new ConcreteIterator(this.vector); } public void remove(Object object){ this.remove(object); } } //场景类 public class Client{ public static void main(String[] args){ Aggregate agg=new ConcreteAggregrate(); agg.add("abc"); agg.add("defc"); agg.add("qqqq"); Iterator iterator=agg.iteragor(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } }