Design Patterns教程-迭代器模式

根据GoF(四人帮),迭代器模式用于“在不暴露其底层实现的情况下顺序访问聚合对象的元素”。
迭代器模式也被称为游标(Cursor)。
在集合框架中,我们现在使用迭代器,它比枚举更受欢迎。
java.util.Iterator
接口使用了迭代器设计模式。
迭代器模式的优点
- 它支持集合遍历的多种变体。
- 它简化了集合的接口。
迭代器模式的使用场景
它用于:
- 当你想要访问一个集合对象而不暴露其内部表示时。
- 当需要在集合中支持多次遍历对象时。
迭代器模式示例
让我们通过上面的UML图来理解迭代器模式的示例。
迭代器模式的UML图:
上述UML的实现
第一步
创建一个Iterator接口。
public interface Iterator {
public boolean hasNext();
public Object next();
}
第二步
创建一个Container接口。
public interface Container {
public Iterator getIterator();
} // Iterator接口的结束
第三步
创建一个实现Container接口的CollectionofNames类。
文件:CollectionofNames.java
public class CollectionofNames implements Container {
public String name[] = {"Ashwani Rajput", "Soono Jaiswal", "Rishi Kumar", "Rahul Mehta", "Hemant Mishra"};
@Override
public Iterator getIterator() {
return new CollectionofNamesIterator();
}
private class CollectionofNamesIterator implements Iterator {
int i;
@Override
public boolean hasNext() {
if (i < name.length) {
return true;
}
return false;
}
@Override
public Object next() {
if (this.hasNext()) {
return name[i++];
}
return null;
}
}
}
第四步
创建一个IteratorPatternDemo类。
文件:IteratorPatternDemo.java
public class IteratorPatternDemo {
public static void main(String[] args) {
CollectionofNames cmpnyRepository = new CollectionofNames();
for (Iterator iter = cmpnyRepository.getIterator(); iter.hasNext();) {
String name = (String) iter.next();
System.out.println("Name : " + name);
}
}
}
输出
Name : Ashwani Rajput
Name : Soono Jaiswal
Name : Rishi Kumar
Name : Rahul Mehta
Name : Hemant Mishra