1创建一个迭代器接口
package cursorpattern;
/**
* 迭代器接口
*/
public interface Iterator<T> {
T next();
boolean hasNext();
}
2 创建容器接口
package cursorpattern;
/**
* 容器接口
*/
public interface Aggregate<T> {
/**
* 向容器添加数据
* @param obj
*/
void add(T obj);
/**
* 从容器移除数据
* @param obj
*/
void remove(T obj);
/**
* 创建容器的迭代器
* @return
*/
Iterator<T> iterator();
}
3创建实现类
package cursorpattern;
import java.util.ArrayList;
import java.util.List;
/**
* 具体迭代器
*/
public class ConcreteIterator<T> implements Iterator<T>{
//创建容器
private List<T> list = new ArrayList<>();
//声明游标指针
private int cursor = 0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
@Override
public T next() {
T obj = null;
if(hasNext()){
obj = list.get(cursor++);
}
return obj;
}
@Override
public boolean hasNext() {
return cursor != list.size();
}
}
4 创建实现类
package cursorpattern;
import java.util.ArrayList;
import java.util.List;
/**
* 具体容器
* @param <T>
*/
public class ConcreteAggregate<T> implements Aggregate<T>{
private List<T> list = new ArrayList<>();
@Override
public void add(T obj) {
list.add(obj);
}
@Override
public void remove(T obj) {
list.remove(obj);
}
@Override
public Iterator<T> iterator() {
return new ConcreteIterator<>(list);
}
}
5 迭代容器元素
package cursorpattern;
public class Client {
public static void main(String[] args) {
//创建具体容器对象
Aggregate<String> aggregate = new ConcreteAggregate<>();
//给容器添加数据
aggregate.add("好覅回复IHF我i的华为i就搜");
aggregate.add("好覅回复IHF我i的华为i就搜");
aggregate.add("好覅回复IHF我i的华为i就搜");
//获取容器的迭代器
Iterator<String> iterator = aggregate.iterator();
//迭代器遍历具体容器的元素
while (iterator.hasNext()) {
//获取找到的下一个元素
System.out.println(iterator.next());
}
}
}