一、核心作用:
提供一个可以遍历聚合对象的方式
聚合对象:存储数据
迭代器:遍历数据
二、常见应用场景:
1、JDK内置的迭代器(List/Set)
三、迭代器模式的实现:
抽象迭代器(Iterator)角色:此抽象角色定义出遍历元素所需的接口
具体迭代器(ConcreteIterator)角色:实现了Iterator接口
聚类(Aggregate)角色:此抽象角色给出创建迭代器对象的接口
具体聚集类(ConcreteAggregate)角色:实现了创建迭代器Iterator对象的接口,返回一个合适的具体迭代器实例
四、代码示例:
一、抽象迭代器:
package com.hezeu.iterator;
/**
* @Classname MyInteger
* @Description 抽象迭代器
* @Date 2020/2/25 下午 07:28
* @Created by 朱进博 1724282894@qq.com
*/
public interface MyInteger {
void first();
void next();
boolean hasNext();
boolean isFirst();
boolean isLast();
Object getCurrentObj();
}
二、具体迭代器:
package com.hezeu.iterator;
import java.util.List;
/**
* @Classname ConcreteIterator
* @Description TODO
* @Date 2020/2/25 下午 08:48
* @Created by 朱进博 1724282894@qq.com
*/
public class ConcreteIterator implements MyInteger {
private List<Object> list;
private int cursor; //游标位置
public ConcreteIterator(List<Object> list) {
this.list = list;
}
@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);
}
}
三、聚类:
package com.hezeu.iterator;
import java.util.List;
/**
* @Classname Aggregate
* @Description TODO
* @Date 2020/2/25 下午 08:31
* @Created by 朱进博 1724282894@qq.com
*/
public interface Aggregate {
MyInteger createIterator();
void addObject(Object obj);
void removeObject(Object obj);
List<Object> getList();
void setList(List<Object> list);
}
四、具体聚类
package com.hezeu.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱进博 1724282894@qq.com
*/
public class ConcreteAggregate implements Aggregate{
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 MyInteger createIterator() {
return new ConcreteIterator(list);
}
}
五、迭代器模式的优缺点:
优点:
- 更好的封装性
- 可以以不同的遍历方式来遍历一个聚合
- 迭代器简化了聚合的接口
- 简化客户端调用
- 同一聚合可以有多个遍历