迭代器模式:Iterator
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
接口
package com.xiaoqiang.gof23.actionnModel.iterator;
/**
* @author xiaoqiang
* @date $(DATE)-$(TIME)
*/
public interface MyIterator {
void first(); //游标指向第一个元素
void next(); //将游标指向下一个元素
boolean hasNext(); //判断是否有下一个
boolean isFirst();
boolean isLast();
// 获取当前游标的指向
Object getCurrentObj();
}
package com.xiaoqiang.gof23.actionnModel.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @author xiaoqiang
* @date $(DATE)-$(TIME)
* 自定义的聚合类
*/
public class ConcreteMyAggregate {
private List<Object> list = new ArrayList<>();
public void addObjet(Object o) {
this.list.add(o);
}
public void removeObject(Object o) {
this.list.remove(o);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
// 获取迭代器的方法
public MyIterator ctreateIterator() {
return new ConcreteIterator();
}
// 迭代器的内部类 为具体类提供服务
private class ConcreteIterator implements MyIterator {
// 定义游标记录遍历时的位置
private int cursor;
@Override
public void first() {
this.cursor = 0;
}
@Override
public void next() {
if (cursor < list.size()) {
cursor++;
}
}
@Override
public boolean hasNext() {
if (cursor < list.size()) {
return true;
} else {
return false;
}
}
@Override
public boolean isFirst() {
return cursor == 0;
}
@Override
public boolean isLast() {
return cursor == (list.size() - 1);
}
@Override
public Object getCurrentObj() {
return list.get(cursor);
}
}
}