Java基础之143.迭代器设计模式

本文详细介绍了迭代器设计模式的概念,包括其应用场景、角色构成及其实现方式。通过实例展示了如何使用迭代器模式遍历集合对象,同时保持对象的内部表示不被暴露,适用于需要对聚合对象进行遍历但又不想公开其内部结构的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器设计模式

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

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

迭代器模式的角色构成
(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:

  • 取得下一个元素的方法next(),
  • 判断是否遍历结束的方法hasNext()),
  • 移出当前对象的方法remove(),

(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。
(3)容器角色(Aggregate): 一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等
(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkedList,Set接口的哈希列表的实现HashSet等。

在这里插入图片描述
在这里插入图片描述

这个模式用的比较少 看看理解一下就行
下面是一个Test实现类 (写的比较简单 很多东西没实现)

package iterator;

/**
 * 迭代器模式
 * @author vince
 * @description
 */
public class Test {

	public static void main(String[] args) {
		MyList list = new ConcreteAggregate();//自己写的 里面用数组实现的
//相当于 List      和      ArrayList
		list.add("刘备");
		list.add("张飞");
		list.add("关羽");
		list.add("曹操");
		list.add("诸葛亮");
		Iterator iter = list.iterator();
		while(iter.hasNext()){
			System.out.println(iter.next());
		}
	}

}

iterator接口

package iterator;

/**
 * 迭代器的接口
 * @author vince
 * @description
 */
public interface Iterator {
	public boolean hasNext();
	public Object next();
	//remove方法没写
}

MyList接口 容器接口 模仿List来的

package iterator;

/**
 * 容器的接口
 * @author vince
 * @description
 */
public interface MyList {
	void add(Object e);
	Object get(int index);
	Iterator iterator();
	int getSize();
	
}

Iterator实现类 ConcreteIterator

package iterator;

/**
 * 迭代器接口的具体实现类
 * @author vince
 * @description
 */
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接口实现类 ConcreteAggregate

package iterator;

/**
 * 容器接口的具体实现类 自己写的测试类 不是那么严谨
 * @author vince
 * @description
 */
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、付费专栏及课程。

余额充值