本文为笔者学习《Head First设计模式》的笔记,并加入笔者自己的理解和归纳总结
迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。
构造器
有两个商店,分别采用数组(ArrayStore
)和列表(ListStore
)的方式存储商品。但为了访问方便,都会生成一个迭代器(Iterator
)。
public interface Iterator {
boolean haseNext();
Object next();
}
public class ArrayStore {
private String[] goodsArray;
private int count;
public ArrayStore() {
goodsArray = new String[100];
count = 0;
}
public void addGoods(String goods) {
goodsArray[count] = goods;
++count;
}
public Iterator iterator() {
return new ArrayStoreIterator(goodsArray, count);
}
}
public class ListStore {
private List<String> goodsList = new ArrayList<>();
public void addGoods(String goods) {
goodsList.add(goods);
}
public Iterator iterator() {
return new ListStoreIterator(goodsList);
}
}
数组商店迭代器(ArrayStoreIterator
)和列表商店迭代器(ListStoreIterator
)
public class ArrayStoreIterator implements Iterator {
private String[] goodsArray;
private int count;
private int index;
ArrayStoreIterator(String[] goodsArray, int count) {
this.goodsArray = goodsArray;
this.count = count;
index = -1;
}
@Override
public boolean haseNext() {
return index + 1 < count;
}
@Override
public Object next() {
index = index + 1;
return goodsArray[index];
}
}
public class ListStoreIterator implements Iterator {
private List<String> goodsList;
private int index;
public ListStoreIterator(List<String> goodsList) {
this.goodsList = goodsList;
index = -1;
}
@Override
public boolean haseNext() {
return index + 1 < goodsList.size();
}
@Override
public Object next() {
index = index + 1;
return goodsList.get(index);
}
}
运行
public static void main(String[] args) {
ArrayStore arrayStore = new ArrayStore();
arrayStore.addGoods("goods1");
arrayStore.addGoods("goods2");
arrayStore.addGoods("goods3");
System.out.print("ArrayStore have");
for (Iterator iterator = arrayStore.iterator(); iterator.haseNext();) {
System.out.print(" " + iterator.next());
}
System.out.println();
ListStore listStore = new ListStore();
listStore.addGoods("goods4");
listStore.addGoods("goods5");
System.out.print("ListStore have");
for (Iterator iterator = listStore.iterator(); iterator.haseNext();) {
System.out.print(" " + iterator.next());
}
System.out.println();
}
输出
相关文章
Java 设计模式