《大话设计模式--迭代器模式》笔记

1、迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示。

2、当你访问一个聚合对象,而且不管对象是什么都需要遍历的时候,你就应该考虑使用迭代器模式。
当你需要对聚集有多种方式遍历的时候,可以考虑室友迭代器模式。

3、目前迭代器模式的实用价值已经远不如学习价值了。

4、迭代器模式结构图,
在这里插入图片描述

5、Iterator迭代器类

public abstract class Iterator {
	
	//得到开始对象
	public abstract Object first();
	//得到下一个对象
	public abstract Object next();
	//判断是否结尾
	public abstract boolean isDone();
	//当前对象
	public abstract Object CurrentItem();
	

}

aggregate聚集抽象类

public abstract class Aggregate {

	//创建抽象类
	public abstract Iterator createIterator();
}

ConcreteIterator具体迭代器类,继承Iterator

public class ConcreteIterator extends Iterator {

	//定义了一个具体聚集对象
	private ConcreteAggregate aggregate;
	private int current=0;
	
	public ConcreteIterator(ConcreteAggregate aggregate) {
		// TODO Auto-generated constructor stub
		this.aggregate=aggregate;
	}
	
	@Override
	public Object first() {
		// TODO Auto-generated method stub
		return aggregate.get(0);
	}

	@Override
	public Object next() {
		// TODO Auto-generated method stub
		Object ret=null;
		current++;
		
		if(current<aggregate.count()) {
			ret=aggregate.get(current);
		}
		return ret;
	}

	@Override
	public boolean isDone() {
		// TODO Auto-generated method stub
		return current>=aggregate.count()? true:false;
	}

	@Override
	public Object CurrentItem() {
		// TODO Auto-generated method stub
		return aggregate.get(current);
	}

}

ConcreteAggregate具体聚集类

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

	@Override
	public Iterator createIterator() {
		// TODO Auto-generated method stub
		return new ConcreteIterator(this);
	}
	

	public int count() {
		return items.size();
	}
	
	
   public Object get(int index){
	   
	   return items.get(index);
	   
   }
	

   public void set(int index,Object value){
	   
	    items.add(index, value);
   }
	
}

客户端代码:

public class Client {
	
	public static void main(String[] args) {
		ConcreteAggregate a=new ConcreteAggregate();
		
		a.set(0, "大鸟");
		a.set(1, "小明");
		a.set(2, "小王");
		a.set(3, "老外");
		a.set(4, "内部员工");
		a.set(5, "小偷");
		
		Iterator i=new ConcreteIterator(a);
		
		Object item=i.first();
		
		while(!i.isDone()) {
			System.out.println(i.CurrentItem()+"请买票");
			i.next();
		}
		
		
	}

}

6、总结
迭代器:模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样做既可以不暴露集合的内部结构,又可以让外部代码透明的访问集合内部数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值