Java设计模式(十四)---迭代器模式

x33g5p2x  于2021-03-13 发布在 Java  
字(1.8k)|赞(0)|评价(0)|浏览(288)

 定义:它提供一个方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。
这个在javaAPI中已经封装的很好了,任何一个容器的遍历都可以使用Iterator来迭代。

一般模式:

Iterator抽象迭代器
抽象迭代器负责定义访问和遍历元素的接口,基本上有三个方法。next()、hasNext()、remove();
ConcreteIterator具体迭代器
具体迭代器角色要实现迭代器的接口,完成容器元素的遍历。
Aggregate抽象容器
容器角色负责提供创建具体迭代器角色的接口,必然提供一个类似iterator()方法
Concrete Aggregate具体容器。

具体容器实现容器接口定义的方法,创建出容纳迭代器的对象

public class IteratorTest {
	public static void main(String[] args) {
		//模拟容器,添加一些信息
		Aggreragte aggVector = new ConcreteAggregate();
		aggVector.add("lzl");
		aggVector.add("xy");
		aggVector.add("daughter");
		//遍历
		Iterator it = aggVector.iterator();
		while(it.hasNext()){ 
			//如果有下一个。获取信息
			String info = (String) it.next();
			System.out.println("------"+info);
		}
	}
}
/**
 * 抽象的迭代器,只提供基本的方法。
 * 
 * @author admin
 *
 */
interface Iterator{
	//删除
	boolean remove();
	//是否还有下一个
	boolean hasNext();
	//找到下一个元素。
	Object next();
}
/**
 * 具体接口的实现方法
 * @author admin
 *
 */
class ConcreteIterator implements Iterator{
	private Vector vector ;
	private int cursor = 0;
	
	//构造函数,将需要遍历的vector对象传递进来
	public ConcreteIterator(Vector vector) {
		this.vector = vector;
	}
	@Override
	public boolean remove() {
		boolean flag = (boolean) this.vector.remove(this.cursor); 
		return flag;
	}

	@Override
	public boolean hasNext() {
		if(vector.size() != cursor){
			return true;
		}
		return false;
	}

	@Override
	public Object next() {
		//如果还有下一个,就返回
		if(this.hasNext()){
			return this.vector.get(cursor++);
		}
		return null;
	}
	
}
/**
 * 抽想的接口容器类,例如java中的List集合等.
 * @author admin
 *
 */
interface Aggreragte{
	//增加元素
	boolean add(Object obj);
	//创建迭代器的接口。
	Iterator iterator();
	//删除元素
	boolean remove(Object obj);
}
/**
 * 具体的抽象容器接口实现类,例如java中的ArrayList集合。
 * @author admin
 *
 */
class ConcreteAggregate implements Aggreragte{
	private Vector vector = new Vector();
	@Override
	public Iterator iterator() {
		return new ConcreteIterator(this.vector);
	}

	@Override
	public boolean add(Object obj) {
		boolean flag = vector.add(obj);
		return flag;
	}

	@Override
	public boolean remove(Object obj) {
		boolean flag = vector.remove(obj);
		return flag;
	}
	
}

相关文章