您的位置:首页 > 其它

设计模式-行为型- 迭代器模式(Iterator)

2016-08-27 11:46 429 查看

定义

又叫游标(Cursor)模式,提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节

角色

迭代器角色(Iterator):负责定义访问和遍历元素的接口

具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置

容器角色(Container):负责提供创建具体迭代器角色的接口

具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关

优点

它支持以不同的方式遍历一个聚合对象

在同一个聚合上可以有多个遍历

增加新的聚合类和迭代器类都很方便,无须修改原有代码

缺点

新增一个聚合类,就要相应的实现一个迭代器类,类的个数增多

适用场景

访问一个对象的内容,又不想暴露对象的内部结构

对对象进行遍历

类图



package com.vapy.behavior.Iterator;
/**
*
* @author vapy 2016年8月27日
*
*/
public interface Aggregat {
public Iterator createIterator();
public void add(Object obj);
}


package com.vapy.behavior.Iterator;

import java.util.Vector;
/**
*
* @author vapy 2016年8月27日
*
*/
public class ConcreteAggregat implements Aggregat {
private Vector<Object> vector = null;

public Vector<Object> getVector() {
return vector;
}

public void setVector(Vector<Object> vector) {
this.vector = vector;
}

public ConcreteAggregat(){
vector = new Vector<Object>();
}

@Override
public void add(Object obj) {
vector.add(obj);
}

@Override
public Iterator createIterator() {
return new ConcreteIterator(vector);
}

}


package com.vapy.behavior.Iterator;
/**
*
* @author vapy 2016年8月27日
*
*/
public interface Iterator {
public Object next();
public Object currentItem();
public boolean isDone();
public Object first();
}


package com.vapy.behavior.Iterator;

import java.util.Vector;
/**
*
* @author vapy 2016年8月27日
*
*/
public class ConcreteIterator implements Iterator {
private int cursor = -1;
private Vector<Object> vector = null;

public ConcreteIterator(final Vector<Object> vector){
this.vector = vector;
}

@Override
public Object first() {
return vector.get(0);
}

@Override
public Object next() {
cursor ++;
return vector.get(cursor);
}

@Override
public Object currentItem() {
return vector.get(cursor);
}

@Override
public boolean isDone() {
if(cursor >= this.vector.size() - 1){
return true;
} else {
return false;
}
}
}


package com.vapy.behavior.Iterator;
/**
*
* @author vapy 2016年8月27日
*
*/
public class Client {
public static void main(String[] args) {
final Aggregat agg = new ConcreteAggregat();
agg.add("abc");
agg.add("def");
final Iterator iterator = agg.createIterator();
System.out.println(iterator.first());
while(!iterator.isDone()){
System.out.println(iterator.next());
}
}
}




本文代码可在github查看:点击此处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息