定义
- 如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。
- 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。
- 提供了一种设计思想,就是一个类应该只有一个引起变化的原因(叫做单一责任
原则)。在聚合类中,我们把迭代器分开,就是要把管理对象集合和遍历对象集
合的责任分开,这样一来集合改变的话,只影响到聚合对象。而如果遍历方式改变
的话,只影响到了迭代器。
代码
import java.util.ArrayList;
import java.util.List;
class test13 {
public static void main(String[] args) {
MyCollection<String> myCollection = new MyCollection<>();
myCollection.add("a");
myCollection.add("b");
myCollection.add("c");
myCollection.add("d");
myCollection.add("e");
Iterator<String> iterator = myCollection.createIterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
/**
* 迭代器接口
*/
interface Iterator<T> {
public T first();
public T next();
public Boolean hasNext();
public T current();
}
/**
* 集合接口
*/
interface ICollection<T> {
public Iterator<T> createIterator();
}
/**
* 集合 实现类
*/
class MyCollection<T> implements ICollection<T>{
List<T> list = new ArrayList<T>();
@Override
public Iterator<T> createIterator() {
return new MyIterator<>(list);
}
public void add(T t) {
list.add(t);
}
public void remove(T t) {
list.remove(t);
}
}
/**
* 迭代器实现类
*/
class MyIterator<T> implements Iterator<T> {
private int cursor;
private List<T> list;
public MyIterator(List<T> list){
this.list = list;
}
@Override
public T first() {
cursor = 0;
return list.get(0);
}
@Override
public T next() {
T t = null;
if (hasNext()) {
t = list.get(cursor);
}
cursor ++;
return t;
}
@Override
public Boolean hasNext() {
return cursor < list.size();
}
@Override
public T current() {
return list.get(cursor);
}
}