迭代器模式(Iterator)

定义

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

简单来说,遍历容器用的。

原理UML类图

UML类图
角色说明:

  1. Iterator : 迭代器接口,是JDK自带的接口。
  2. ConcreteIterator : 具体的迭代器类,实现迭代逻辑。
  3. Aggregate : 一个统一的聚合接口,将客户端和具体聚合解耦
  4. ConcreteAggreage : 具体的聚合持有对象集合,并提供一个方法,返回一个迭代器集合

小案例

ArrayIterator

import java.util.Iterator;

public class ArrayIterator implements Iterator{
	// 数组存放的数据
	String[] data;
	// 遍历的位置
	int position = 0;
	public ArrayIterator(String[] data) {
		super();
		this.data = data;
	}
	@Override
	public boolean hasNext() {
		// 如果超出数组长度,或者没有下个元素,就返回false
		return !(position>=data.length || data[position].equals(""));
	}
	@Override
	public Object next() {
		position++;
		return data[position-1];
	}
	
}

ArrayListIterator

import java.util.Iterator;
import java.util.List;

public class ArrayListIterator implements Iterator{
	// 数组存放的数据
	List<String> data;
	// 遍历的位置
	int position = 0;
	public ArrayListIterator(List<String> data) {
		super();
		this.data = data;
	}
	@Override
	public boolean hasNext() {
		// 如果超出数组长度,或者没有下个元素,就返回false
		return !(position>=data.size() || data.get(position).equals(""));
	}
	@Override
	public Object next() {
		position++;
		return data.get(position-1);
	}	
	
}

Message

import java.util.Iterator;

public interface Message {
	void say();
	Iterator createIterator();
}

ArrayMessage

import java.util.Iterator;

public class ArrayMessage implements Message{
	
	String[] data;

	public ArrayMessage() {
		data = new String[] {"数组信息1","数组信息2","数组信息3"};
	}

	@Override
	public void say() {
		System.out.println("数组存放的信息");
	}

	@Override
	public Iterator createIterator() {
		// TODO 自动生成的方法存根
		return new ArrayIterator(data);
	}
	
}

ArrayListMessage

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListMessage implements Message{
	List<String> data;

	public ArrayListMessage() {
		data = new ArrayList<>();
		data.add("集合信息1");
		data.add("集合信息2");
		data.add("集合信息3");
	}

	@Override
	public void say() {
		System.out.println("数组存放的信息");
	}

	@Override
	public Iterator createIterator() {
		// TODO 自动生成的方法存根
		return new ArrayListIterator(data);
	}
	
}

Client

import java.util.Iterator;

public class Client {

	public static void main(String[] args) {
		Iterator array = (Iterator) new ArrayMessage().createIterator();
		while( array.hasNext()) {
			System.out.println(array.next());
		}
		
		Iterator arrayList = (Iterator) new ArrayListMessage().createIterator();
		while( arrayList.hasNext()) {
			System.out.println(arrayList.next());
		}
	}

}

运行结果:

数组信息1
数组信息2
数组信息3
-----
集合信息1
集合信息2
集合信息3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值