迭代器模式
1、简介
迭代器模式又叫游标模式,是对象的行为模式,迭代器模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象
2、迭代器模式的类图
3、迭代器模式涉及到的角色
从上图可以看出,迭代器模式涉及到以下几个角色
3.1、抽象迭代器角色:它定义了遍历元素所需要的接口
3.2、具体迭代器角色:实现抽象迭代器所声明的接口 并保持迭代过程中的游标位置
3.3、抽象容器角色:声明可以操作容器的方法,其中包括一个获取迭代器多想的方法
3.4、具体容器角色:实现抽象容器角色声明的方法。
4、源代码
4.1、抽象迭代器角色
package Iterator; /** * ******************************************************** * @ClassName: Iterator * @Description: 抽象迭代器角色 * ********************************************************** */ public interface Iterator { public boolean hasNext(); public Object next(); }
4.2、具体迭代器角色
package Iterator; /** * ******************************************************** * @ClassName: ConcreteIterator * @Description: 具体迭代器角色 * ********************************************************** */ public class ConcreteIterator implements Iterator{ private List list = null; private int index; public ConcreteIterator(List list) { super(); this.list = list; } @Override public boolean hasNext() { if (index >= list.getSize()) { return false; } else { return true; } } @Override public Object next() { Object object = list.get(index); index++; return object; } }
4.3、抽象容器角色
package Iterator; /** * ******************************************************** * @ClassName: List * @Description:抽象容器角色 * ********************************************************** */ public interface List { //定义集合可以进行的操作 public void add(Object obj); public Object get(int index); public Iterator iterator(); public int getSize(); }
4.4、具体容器角色
package Iterator; /** * ******************************************************** * @ClassName: ConcreteAggregate * @Description: 具体容器角色 * ********************************************************** */ public class ConcreteAggregate implements List{ private Object[] list; private int size=0; private int index=0; public ConcreteAggregate(){ index=0; size=0; list=new Object[100]; } @Override public void add(Object obj) { list[index++]=obj; size++; } @Override public Iterator iterator() { return new ConcreteIterator(this); } @Override public Object get(int index) { return list[index]; } @Override public int getSize() { return size; } }
4.5、测试客户端
package Iterator; /** * ******************************************************** * @ClassName: Client * @Description: 迭代器模式测试客户端 * ********************************************************** */ public class Client { public static void main(String[] args) { List list=new ConcreteAggregate(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }