迭代器模式Iterator
- 定义迭代器的接口,以及对应的hasNext以及next方法
- 注意定义的时候使用泛型,不然接口方法的返回值只能是Object,实际使用的时候还需要强制转换
- 在被迭代的接口里面定义获取迭代器的方法
- 注意使用泛型
- 在需要被迭代的对象里面实现一个具体迭代器,专属于这个对象的迭代器以及对应的迭代方法,每一个对象的迭代遍历的方法应该是不一样
- 注意实现被迭代接口的时候标注的泛型依旧是被迭代对象
- public class MyArrayList<E> implements MyCollection<E>
实现(注意适应泛型)
定义迭代器的抽象方法
package com.deltaqin.designPattern.d06_iterator;
/**
* @author deltaqin
* @date 2021/3/27 10:38 上午
*/
public interface MyIterator<T> {
boolean hasNext();
T next();
}
定义集合的抽象方法
package com.deltaqin.designPattern.d06_iterator;
/**
* @author deltaqin
* @date 2021/3/27 10:39 上午
*/
public interface MyCollection<E> {
void add(E e);
int size();
MyIterator myiterator();
}
在集合内部实现迭代器的具体逻辑
package com.deltaqin.designPattern.d06_iterator;
/**
* @author deltaqin
* @date 2021/3/27 10:40 上午
*/
public class MyArrayList<E> implements MyCollection<E>{
private E[] objects = (E[])new Object[10];
private int size = 0;
public void add(E e) {
if (size+1 < objects.length) {
E[] objectTmp = (E[])new Object[objects.length * 2];
System.arraycopy(objects,0,objectTmp,0,objects.length);
objects = objectTmp;
}
objects[size++] = e;
}
@Override
public int size() {
return size;
}
@Override
public MyIterator myiterator() {
return new ArrayListIterator<E>();
}
class ArrayListIterator<E> implements MyIterator<E> {
private int index = 0;
@Override
public boolean hasNext() {
return index < size;
}
@Override
public E next() {
E e = (E) objects[index++];
return e;
}
}
}
测试
package com.deltaqin.designPattern.d06_iterator;
/**
* @author deltaqin
* @date 2021/3/27 10:33 上午
*/
public class Demo {
public static void main(String[] args) {
MyCollection<String> myCollection = new MyArrayList<>();
myCollection.add("delta0");
myCollection.add("delta1");
myCollection.add("delta2");
myCollection.add("delta3");
MyIterator myiterator = myCollection.myiterator();
while (myiterator.hasNext()) {
System.out.println(myiterator.next());
}
}
}
posted on 2025-10-14 23:02 chuchengzhi 阅读(4) 评论(0) 收藏 举报
浙公网安备 33010602011771号