1. 概念
提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。
2. 适用场景
- 当需要为聚合对象提供多种遍历方式时。
- 当需要为遍历不同的聚合结构提供一个统一的接口时。
- 当访问一个聚合对象的内容而无须暴露其内部细节的表示时。
3. 优缺点
3.1. 优点
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 遍历任务交由迭代器完成,这简化了聚合类。
- 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
- 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
- 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
3.2. 缺点
增加了类的个数,这在一定程度上增加了系统的复杂性
4. 样例
4.1. 自定义迭代器
public interface Iterator<T> {
/**
* 判断是否存在下一个元素
*
* @return boolean
* @author <a href="https://github.com/rothschil">Sam</a>
* @date 2022/8/6-13:15
**/
boolean hasNext();
/**
* 获取下一个元素
*
* @return T
* @author <a href="https://github.com/rothschil">Sam</a>
* @date 2022/8/6-13:15
**/
T next();
}
4.2. 定义集合
public interface Container<T> {
/**
* 迭代器
*
* @return Iterator<T>
* @author <a href="https://github.com/rothschil">Sam</a>
* @date 2022/8/6-13:13
**/
Iterator<T> getIterator();
}
4.3. 定义集合
public class FilterService implements Container{
public static final String[] UN_FILER = {"CharsetFilter" , "LoginFilter" ,"RuleFilter" , "MvcFilter"};
@Override
public Iterator getIterator() {
return new FilterIterator();
}
class FilterIterator implements Iterator<String>{
int index;
@Override
public boolean hasNext() {
if(index< UN_FILER.length){
return true;
}
return false;
}
@Override
public String next() {
if(this.hasNext()){
return UN_FILER[index++];
}
return null;
}
}
}
4.4. 效果
2022-08-06 14:28:47,904 WARN (TestDesign.java:250)- CharsetFilter
2022-08-06 14:28:47,907 WARN (TestDesign.java:250)- LoginFilter
2022-08-06 14:28:47,908 WARN (TestDesign.java:250)- RuleFilter
2022-08-06 14:28:47,908 WARN (TestDesign.java:250)- MvcFilter
2022-08-06 14:28:47,912 INFO (TestDesign.java:68)- [AfterAll] 总共耗时=13 毫秒