定义
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而不是暴露该对象的内部表示。
简单来说,遍历容器用的。
原理UML类图
角色说明:
- Iterator : 迭代器接口,是JDK自带的接口。
- ConcreteIterator : 具体的迭代器类,实现迭代逻辑。
- Aggregate : 一个统一的聚合接口,将客户端和具体聚合解耦
- 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