1、定义
迭代器模式是提供一种顺序访问集合对象元素的方式,使用者不需要知道集合对象的底层描述。提供了一种新的集合对象访问方式。
迭代器模式属于行为模式。
2、有点
- 支持以不同的方式遍历一个聚合对象。
- 迭代器简化了聚合类。
- 在同一个聚合上可以有多个遍历。
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
3、缺点
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
4、使用场景
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 需要为聚合对象提供多种遍历方式。
- 为遍历不同的聚合结构提供一个统一的接口。
5、注意事项
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。
6、实现
6.1、创建迭代器接口
/**
* desc: 迭代器接口
*
* @author xuebin3765@163.com
* @version 1.0
* @date 2020/06/16 10:39
*/
public interface MyIterator {
public boolean hasNext();
public Object next();
}
6.2、创建容器接口
/**
* desc: 容器接口
*
* @author xuebin3765@163.com
* @version 1.0
* @date 2020/06/16 10:40
*/
public interface MyContainer {
public MyIterator iterator();
}
6.3、创建实现迭代器的目标类
/**
* desc: 需要迭代的对象类
*
* @author xuebin3765@163.com
* @version 1.0
* @date 2020/06/16 10:40
*/
public class NameRepository implements MyContainer {
public String[] names = {"张三" , "李四" ,"王二" , "孙六", "微信公众号", "cxyknet"};
@Override
public MyIterator iterator() {
return new NameIterator();
}
private class NameIterator implements MyIterator {
private int index;
@Override
public boolean hasNext() {
return index < names.length;
}
@Override
public Object next() {
if (this.hasNext()){
return names[index++];
}
return null;
}
}
}
6.4、测试方法
/**
* desc: 测试方法
*
* @author xuebin3765@163.com
* @version 1.0
* @date 2020/06/16 10:44
*/
public class MyIteratorTest {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(MyIterator iter = namesRepository.iterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
6.5、测试结果
Name : 张三
Name : 李四
Name : 王二
Name : 孙六
Name : 微信公众号
Name : cxyknet