原博主地址:(https://blog.csdn.net/LoveLion/article/details/17517213)
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。
使用迭代器模式相当于把存储和遍历区分开来
迭代器抽象类
public interface AbstractIterator {
public void next(); // 移至下一个元素
public boolean isLast(); // 判断是否为最后一个元素
public void previous(); // 移至上一个元素
public boolean isFirst(); // 判断是否为第一个元素
public Object getNextItem(); // 获取下一个元素
public Object getPreviousItem(); // 获取上一个元素
}
迭代器
package test2019.mon03.迭代器模式;
import java.util.List;
public class ProductIterator implements AbstractIterator {
private ProductList productList;
private List products;
private int cursor1; // 定义一个游标,用于记录正向遍历的位置
private int cursor2; // 定义一个游标,用于记录逆向遍历的位置
public ProductIterator(ProductList productList) {
this.productList = productList;
this.products = productList.getObjects(); // 获取集合对象
cursor1 = 0; // 设置正向遍历游标的初始值
cursor2 = products.size() - 1; // 设置逆向遍历游标的初始值
}
@Override
public void next() {
if (cursor1 < products.size()) {
cursor1++;
}
}
@Override
public boolean isLast() {
return cursor1 == products.size();
}
@Override
public void previous() {
if (cursor2 > -1) {
cursor2--;
}
}
@Override
public boolean isFirst() {
return cursor2 == -1;
}
@Override
public Object getNextItem() {
return products.get(cursor1);
}
@Override
public Object getPreviousItem() {
return products.get(cursor2);
}
}
抽象list
package test2019.mon03.迭代器模式;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractObjectList {
protected List<Object> objects = new ArrayList<Object>();
public AbstractObjectList(List objects) {
this.objects = objects;
}
public void addObject(Object obj) {
this.objects.add(obj);
}
public void removeObject(Object obj) {
this.objects.remove(obj);
}
public List getObjects() {
return this.objects;
}
// 声明创建迭代器对象的抽象工厂方法
public abstract AbstractIterator createIterator();
}
实现的list
package test2019.mon03.迭代器模式;
import java.util.List;
public class ProductList extends AbstractObjectList {
public ProductList(List objects) {
super(objects);
}
@Override
public AbstractIterator createIterator() {
return new ProductIterator(this);
}
}
Test
package test2019.mon03.迭代器模式;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List products = new ArrayList();
products.add("倚天剑");
products.add("屠龙刀");
products.add("断肠草");
products.add("葵花宝典");
products.add("四十二章经");
AbstractObjectList list;
AbstractIterator iterator;
list = new ProductList(products); // 创建聚合对象
iterator = list.createIterator(); // 创建迭代器对象
System.out.println("正向遍历:");
while (!iterator.isLast()) {
System.out.print(iterator.getNextItem() + ",");
iterator.next();
}
System.out.println();
System.out.println("-----------------------------");
System.out.println("逆向遍历:");
while (!iterator.isFirst()) {
System.out.print(iterator.getPreviousItem() + ",");
iterator.previous();
}
}
}
迭代器不展示