设计模式-10-迭代器模式

迭代器模式

原理:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节

结构
抽象容器:一般是一个接口,提供一个iterator()方法   例如java中的Collection、Set、List等接口
具体容器:抽象容器的具体实现类,例如java中LinkList、ArrayList、HashSet
抽象迭代器:定义遍历函数所需要的方法如:获取第一个元素、取得下一个元素的方法、是否是最后一个元素的方法、移除某一个元素
迭代器:实现抽象迭代器中的抽象方法,并且实现集合的迭代

代码示例

抽象容器
//抽象容器
public interface Aggregate {
	//添加的方法
	public void add(Object obj);
	//移除的方法
	public void remove(Object obj);
	//获取迭代器对象的方法
	public IteratorInterface iterator();
}

具体容器
<pre name="code" class="html">import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate implements Aggregate{
	private List<Object> list = new ArrayList<Object>();

	@Override
	public void add(Object obj) {
		// TODO Auto-generated method stub
		list.add(obj);
		
	}

	@Override
	public void remove(Object obj) {
		// TODO Auto-generated method stub
		list.remove(obj);
		
	}

	@Override
	public IteratorInterface iterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator(list);
	}

}


 抽象迭代器 
<pre name="code" class="html">public interface IteratorInterface {
	//判断是否有下一个元素
	public boolean hasNext();
	//下一个对象
	public Object next();

}

 
 
迭代器
<pre name="code" class="html">import java.util.*;
import java.util.ArrayList;

public class ConcreteIterator implements IteratorInterface{
	
	private List<Object> list = new ArrayList<Object>();
	//一个游标标明位置
	private int cursor = 0;
	
	public ConcreteIterator(List<Object> list) {
		// TODO Auto-generated constructor stub
		this.list = list;
	}

	@Override
	public boolean hasNext() {
		// TODO Auto-generated method stub
		if(cursor==list.size()){
			return false;
		}
		return true;
	}

	@Override
	public Object next() {
		// TODO Auto-generated method stub
		
		Object object = null;
		if(this.hasNext()){
			object = this.list.get(cursor++);
		}
		return object;
	}

}


 
 

总结

1.在j'ava中一般集合都是有迭代器的,java已经帮你实现好了
2.我们可以提供多种遍历的方式,对于有序列表我们可以提供两种遍历器,一种正序遍历,一种返序遍历,用户只需要使用迭代器就好了(直接帮他封装好了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值