场景:
– 提供一种可以遍历聚合对象的方式。又称为:游标cursor模式
– 聚合对象:存储数据
– 迭代器:遍历数据
结构:
– 聚合对象:存储数据
– 迭代器:遍历数据
基本案例:
– 实现正向遍历的迭代器
– 实现逆向遍历的迭代器
开发中常见的场景:
– JDK内置的迭代器(List/Set)
实例
代码:
迭代器接口:
package com.bjsxt.iterator;
public interface Interator {
void first();
void next();
boolean isFirst();
boolean isLast();
boolean hasNext();
Object getCurrentObject();
}
聚合类
内部类:具体迭代器
package com.bjsxt.iterator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteAggregate {
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 Interator createIterator(){
return new ConcreteIterator();
}
class ConcreteIterator implements Interator{
private int cursor;
@Override
public void first() {
cursor = 0;
}
@Override
public void next() {
if(cursor < list.size() - 1){
cursor+=1;
}else{
cursor = list.size();
}
}
@Override
public boolean isFirst() {
if(cursor == 0)
return true;
return false;
}
@Override
public boolean isLast() {
return cursor==list.size()-1?true:false;
}
@Override
public boolean hasNext() {
if(cursor <= list.size() - 1)
return true;
return false;
}
@Override
public Object getCurrentObject() {
return list.get(cursor);
}
}
}
调用者:
package com.bjsxt.iterator;
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
ConcreteAggregate concreteAggregate = new ConcreteAggregate();
concreteAggregate.setList(list);
Interator iterator = concreteAggregate.createIterator();
while (iterator.hasNext()){
System.out.println(iterator.getCurrentObject());
iterator.next();
}
}
}
uml图:
运行结果: