十七、迭代器模式
迭代器模式(Iterator Pattern)是java和.net中常用的设计模式,用于顺序访问集合的元素,而不必关注集合对象的低曾表示。
- 优点:支持不同的方式遍历一个聚合对象,简化了聚合类。
- 缺点:存储和遍历的分离,使新增聚合类就需要新的迭代器,增加系统复杂度。
实现
创建一个接口IIterator和返回迭代器的容器接口container,以及实现了container的实现类,它包含一个内部类,实现了iiterator接口。
- 创建接口
IIterator.java
/**
* Created by lenovo on 2016/11/30 0030.
* 迭代器接口,
*/
public interface IIterator {
public boolean hasNext();
public Object next();
}
IContiainer.java
/**
* Created by lenovo on 2016/11/30 0030.
* 容器container接口
*/
public interface IContainer {
public IIterator getIterator();
}
- 创建实现类
NameResponsitory.java
,包含一个内部类,并且内部类实现了iterator接口。
/**
* Created by lenovo on 2016/11/30 0030.
* Container的实现类,同时包含一个IIterator的内部实现类
*/
public class NameRepository implements IContainer{
public String[] names = {"Robert","John","Julie","Lora"};
@Override
public IIterator getIterator() {
return new NameIterator();
}
private class NameIterator implements IIterator{
int index;
@Override
public boolean hasNext() {
if (index<names.length){
return true;
}
return false;
}
@Override
public Object next() {
if (this.hasNext()){
return names[index++];
}
return null;
}
}
}
- 演示
IteratorPatternDemo.java
/**
* Created by lenovo on 2016/11/30 0030.
* 使用NameRepository来获取迭代器,并打印输出names
*/
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository names = new NameRepository();
for (IIterator iterator = names.getIterator(); iterator.hasNext(); ) {
System.out.println("Name: " + iterator.next().toString());
}
}
}
- 输出
Name: Robert
Name: John
Name: Julie
Name: Lora