设计模式之迭代器模式

        迭代器模式也叫游标模式,提供一种方法可以访问逐一访问容器里面的每个对象,又不暴露各个对象的内部细节。

        迭代器模式分为下面几个角色:

  • 迭代器角色:定义访问和遍历容器内元素的接口;
  • 具体迭代器:迭代器角色的具体实现,并保存迭代器中的位置;
  • 聚集角色:给出创建迭代器对象的接口;
  • 具体聚集角色:聚集角色的实现,并返回一个迭代器对象的实例。
迭代器角色:
public interface Iterator {
	public Object first();
	public Object next();
	public Object currentObject();
}
具体迭代器角色:
public class ConcreteIterator implements Iterator {
	public ConcreteAggregate soldier;
	public int currentItem = -1;
	public ConcreteIterator(ConcreteAggregate soldier) {
		super();
		this.soldier = soldier;
	}

	@Override
	public Object first() {
		if(soldier.lists.size() > 0) {
			return soldier.lists.get(0);
		}
		return null;
	}

	@Override
	public Object next() {
		if(currentItem < soldier.lists.size() - 1) {
			currentItem++;
			if(currentItem > soldier.lists.size() - 1) {
				currentItem = 0;
			}
			return soldier.lists.get(currentItem);
		}
		return null;
	}

	@Override
	public Object currentObject() {
		return soldier.lists.get(currentItem);
	}

}
聚集角色:
public abstract class Aggregate {
	public abstract Iterator createIterator();
}
具体聚集角色:
public class ConcreteAggregate extends Aggregate {
	public List<String> lists = new ArrayList<String>();
	
	@Override
	public Iterator createIterator() {
		return new ConcreteIterator(this);
	}
	public void addObject(String str) {
		lists.add(str);
	}

}
测试:
public static void main(String[] args) {
		ConcreteAggregate concreteAggregate = new ConcreteAggregate();
		concreteAggregate.addObject("1");
		concreteAggregate.addObject("2");
		concreteAggregate.addObject("3");
		concreteAggregate.addObject("4");
		concreteAggregate.addObject("5");
		Iterator iterator = concreteAggregate.createIterator();
		System.out.println(iterator.first());
		System.out.println("------");
		for(int i = 0; i < concreteAggregate.lists.size(); i++) {
			System.out.println(iterator.next());
		}
		System.out.println("------");
		System.out.println(iterator.currentObject());
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值