java设计模式:迭代器设计模式

提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。

应用场景
1、访问一个聚合的对象,而不需要暴露对象的内部表示
2、支持对聚合对象的多种遍历
3、对遍历不同的对象,提供统一的接口。

迭代器模式的角色构成
1、迭代器角色(Iterator) : 定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元
素的方法next(),判断是否遍历结束的方法hasNext(),移出当前对象的方法remove(),
2、具体迭代器角色(Concrete Iterator) : 实现迭代器接口中定义的方法,完成集合的迭代。
3、容器角色(Aggregate): 一般是一 个接口, 提供一个iterator()方 法,例如java中的Collection接口,List接
口,Set接口等
4、具体容器角色(ConcreteAggregate) : 就是抽象容器的具体实现类,比如List接 口的有序列表实现
ArrayList, List接 口的链表实现LinkList, Set接 口的哈希列表的实现HashSet等。

代码示例:
测试类:

package com.booy;

public class Test {
	public static void main(String[] args) {
		MyList list = new ConcreteAggregate( );
		list.add("刘备");
		list.add("张飞");
		list.add("关羽");
		list.add("曹操");
		list.add("诸葛亮");
		Iterator iter = list.iterator();
		while(iter.hasNext()){
		System.out.println(iter.next());
		}
	}
}
/**
运行结果:
刘备
张飞
关羽
曹操
诸葛亮
*/

Iterator:
迭代器的接口

package com.booy;
public interface Iterator{
		public boolean hasNext();
		public Object next();
}

ConcreteIterator:
迭代器接口的具体实现类

package com.booy;

public class ConcreteIterator implements Iterator{	
		private MyList list = null;
		private int index;//迭代器的指针
		public ConcreteIterator(MyList list) {
		this.list = list;
		}
		@Override
		public boolean hasNext(){
			if(index>=list.getSize())
				return false;
			else return true;
		}
		@Override
		public Object next(){
			Object obj = list.get(index);
			index++;
			return obj;
		}
}

MyList:
容器的接口

package com.booy;
public interface MyList{
	void add(Object e);
	Object get(int index);
	Iterator iterator();
	int getSize();
}

ConcreteAggregate :
容器接口的具体实现类

package com.booy;
public class ConcreteAggregate implements MyList{
		private Object[] elements;//对象数组
		private int size;
		private int index;
		public ConcreteAggregate(){
			elements = new Object[100];//数组容量,此处可设置动态数组扩充
		}
		@Override
		public void add(Object e) {
			elements [index++] = e;
			size++;
		}
		@Override
		public Object get(int index) {
			return elements[index];
		}
		@Override
		public Iterator iterator() {
			return new ConcreteIterator(this);
		}
		@Override
		public int getSize() {
			return size;
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值