根据GoF(四人帮),迭代器模式用于“在不暴露其底层实现的情况下顺序访问聚合对象的元素”

迭代器模式也被称为游标(Cursor)

在集合框架中,我们现在使用迭代器,它比枚举更受欢迎。

java.util.Iterator接口使用了迭代器设计模式。

迭代器模式的优点

  • 它支持集合遍历的多种变体。
  • 它简化了集合的接口。

迭代器模式的使用场景

它用于:

  • 当你想要访问一个集合对象而不暴露其内部表示时。
  • 当需要在集合中支持多次遍历对象时。

迭代器模式示例

让我们通过上面的UML图来理解迭代器模式的示例。

迭代器模式的UML图:

4-1.png

上述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 

标签: Design Patterns, Design Patterns教程, 设计模式, 软件设计, 结构型模式, 行为型模式, 单例模式, 工厂模式, 观察者模式, 中介者模式, 访问者模式