迭代器模式iterator
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为游标cursor模式
- 聚合对象:储存数据
- 迭代器:遍历对象
核心角色
1.Iterator(迭代器)
迭代器定义访问和遍历元素的接口
2.ConcreteIterator (具体迭代器),可以作为ConcreteAggregate的内部类
具体迭代器实现迭代器接口
对该聚合遍历时跟踪当前位置
3.ConcreteAggregate (具体聚合)
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例
package com.liang.iterator;
/**
* @author Administrator
*迭代器
*/
public interface MyIterator {
void first();
void last();
void next();
boolean isFirst();
boolean isLast();
boolean hasNext();
Object getCurrectObj();
int getCursor();
}
package com.liang.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @author Administrator
*具体聚合
*/
public class ConcreteAggregate {
private List<Object> list =new ArrayList<>();
public void addObject(Object obj) {
list.add(obj);
}
public void removeObject(int index) {
list.remove(index);
}
public MyIterator createIterator() {
return new ConcreteIterator();
}
//具体迭代器,ConcreteAggregate的内部类
private class ConcreteIterator implements MyIterator{
private int cursor;
@Override
public void first() {
cursor=0;
}
@Override
public void last() {
cursor=list.size()-1;
}
@Override
public void next() {
cursor++;
}
@Override
public boolean isFirst() {
return cursor==0?true:false;
}
@Override
public boolean isLast() {
return cursor==(list.size()-1)?true:false;
}
@Override
public boolean hasNext() {
if(cursor<(list.size())) {
return true;
}
return false;
}
@Override
public Object getCurrectObj() {
return list.get(cursor);
}
public int getCursor() {
return cursor;
}
}
}
public class Client {
public static void main(String[] args) {
ConcreteAggregate ca=new ConcreteAggregate();
ca.addObject("ada");
ca.addObject("adasd");
ca.addObject("adsadadada");
MyIterator iterator = ca.createIterator();
while(iterator.hasNext()) {
System.out.println(iterator.getCursor());
System.out.println(iterator.getCurrectObj());
iterator.next();
}
}
}