设计模式行为型
迭代模式:
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
它可以使得对于聚合对象的遍历行为和聚合对象分离,即我们不关心聚合对象的底层结构是什么样子
迭代模式中的角色
迭代器角色(Iterator): 负责定义访问和遍历元素的接口。
具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。
容器角色(Container): 负责提供创建具体迭代器角色的接口。
具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关。
迭代器接口:
package com.sun.iteration;
public interface Iterator {
public Object first();
public Object next();
public boolean isDone();
public Object currentItem();
}
具体迭代器
package com.sun.iteration;
import java.util.Vector;
public class ConcreteIterator implements Iterator {
// 当前索引值
private int current = 0;
// 被遍历集合
private Vector vector = null;
public ConcreteIterator(Vector vector) {
super();
this.vector = vector;
}
/**
* 获取第一个元素
*/
@Override
public Object first() {
current = 0;
return vector.get(0);
}
/**
* 获取下一个元素
*/
@Override
public Object next() {
// TODO Auto-generated method stub
Object o = null;
if (vector.size() > current) {
o = vector.get(current);
}
current++;
return o;
}
/**
* 判断是否遍历结束
*/
@Override
public boolean isDone() {
// TODO Auto-generated method stub
return current >= vector.size();
}
/**
* 当前数据元素
*/
@Override
public Object currentItem() {
// TODO Auto-generated method stub
return vector.get(current);
}
}
容器接口
package com.sun.iteration;
public interface Aggregat {
public Iterator createIterator();
}
具体容器实现
package com.sun.iteration;
import java.util.Vector;
public class ConcreteAggregat implements Aggregat{
private Vector vector = null;
public Vector getVector()
{
return vector;
}
public void setVector(Vector vector)
{
this.vector = vector;
}
public ConcreteAggregat( Vector vector)
{
this.vector = vector;
}
@Override
public Iterator createIterator()
{
return new ConcreteIterator(vector);
}
//测试
public static void main(String[] args) {
Vector<String> v = new Vector<String>();
v.add("data----1");
v.add("data----2");
v.add("data----3");
ConcreteAggregat ca = new ConcreteAggregat(v);
Iterator i = ca.createIterator();
while(!i.isDone()) {
System.out.println(i.next());
}
}
}
打印结果:
data----1
data----2
data----3