前言
本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录
迭代器模式
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示
需求
请将数组和List的打印方法改用使用迭代器遍历的方法实现
需求分析
数组打印方法
public void printDatas() {
for (int i = 0; i < datas.length; i++) {
datas[0] = i;
System.out.print(ArrayData.class.getSimpleName() + " : " + datas[i]);
}
}
List打印方法
public void printDatas() {
for (int i = 0; i < 10; i++) {
System.out.print(ListData.class.getSimpleName() + " : " + datas.get(i));
}
}
如何将datas[i]和datas.get(i)完善成类似下面
public void printDatas() {
while (hasNext()) {
System.out.print("printDatas : " + next());
}
}
开发
数组的迭代器实现
public class ArrayDataIterator implements Iterator {
Integer[] datas;
int position = 0;
public void createArrayDataIterator() {
for (int i = 0; i < datas.length; i++) {
datas[0] = i;
}
}
@Override
public boolean hasNext() {
if (position >= datas.length || datas[position] == null) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
return datas[++position];
}
public void printDatas() {
while (hasNext()) {
System.out.print("printDatas : " + next());
}
}
}
List的迭代器实现
public class ListDataIterator implements Iterator {
private ArrayList<Integer> datas = new ArrayList<>();
int position = 0;
public void createIterator() {
for (int i = 0; i < 10; i++) {
datas.add(i);
}
}
@Override
public boolean hasNext() {
if (position >= datas.size() || datas.get(position) == null) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
return datas.get(position);
}
public void printDatas() {
while (hasNext()) {
System.out.print("printDatas : " + next());
}
}
}