作用
- 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
何时使用
- 遍历一个聚合对象。
优点
- 它支持以不同的方式遍历一个聚合对象。
- 迭代器简化了聚合类。
- 在同一个聚合上可以有多个遍历。
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
实例
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/5 17:53
* @Version:
* @Acton: 自己造迭代器
*/
public interface MyIterator {
void first(); //第一个元素
void next(); //下一个元素
boolean hasNext(); //下一个元素
boolean isFirst(); //是否第一个元素
boolean isLast(); //是否最后一个元素
Object getCurrentObj(); //获取当前元素
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/5 18:00
* @Version:
* @Acton: 聚合类
*/
public class Converge {
private List<Object> list = new ArrayList<>();
public void addObject(Object obj){
this.list.add(obj);
}
public void removeObject(Object obj){
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//获取迭代器
public MyIterator createIterator(){
return new ConvergeIterator();
}
//使用内部类定义迭代器,可以直接使用外部类的属性
private class ConvergeIterator implements MyIterator {
private int cursor; //定义游标,用于创建时的位置
@Override
public void first() {
cursor = 0;
}
@Override
public void next() {
if (cursor < list.size()){
cursor++;
}
}
@Override
public boolean hasNext() {
if(cursor < list.size()){
return true;
}
return false;
}
@Override
public boolean isFirst() {
return cursor == 0 ? true:false;
}
@Override
public boolean isLast() {
return cursor == (list.size() - 1) ? true:false;
}
@Override
public Object getCurrentObj() {
return list.get(cursor);
}
}
}
/**
* @Author: create_By: chenxin
* @Data:Created in 2018/9/5 18:48
* @Version:
* @Acton:
*/
public class TestIteratorDemo {
public static void main(String[] args){
test();
}
public static void test(){
Converge converge = new Converge();
converge.addObject("卫庄");
converge.addObject("白凤");
converge.addObject("红莲");
MyIterator iterator = converge.createIterator();
while (iterator.hasNext()){
System.out.println(iterator.getCurrentObj());
iterator.next();
}
}
}