类型:行为型模式
实现原理:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
作用:用于顺序访问集合对象的元素,不需要知道集合对象的底层表示
解决的问题:不同的方式遍历整个整合对象的问题
何时使用:遍历一个聚合对象。
解决的方法:让迭代器访问元素,而不是聚合对象。
实现核心:定义接口:hasNext, next。
应用实例:文件系统遍历
优点: 1、支持以不同的方式遍历一个聚合对象。 2、简化聚合类。 3、在同一个聚合上可以有多个遍历。 4、增加新的聚合类和迭代器类方便
缺点:增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,系统的复杂性随之增加。
使用场景:1、需要不暴露内部信息地访问聚合对象的内容 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。
实现
步骤 1
创建接口:Iterator.java
public interface Iterator {public boolean hasNext();public Object next();
}
Container.java
public interface Container {public Iterator getIterator();
}
步骤 2
创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator。NameRepository.java
public class NameRepository implements Container {public String[] names = {"Robert" , "John" ,"Julie" , "Lora"};@Overridepublic Iterator getIterator() {return new NameIterator();}private class NameIterator implements Iterator {int index;@Overridepublic boolean hasNext() {if(index < names.length){return true;}return false;}@Overridepublic Object next() {if(this.hasNext()){return names[index++];}return null;} }
}
步骤 3
使用 NameRepository 来获取迭代器,并打印名字。IteratorPatternDemo.java
public class IteratorPatternDemo {public static void main(String[] args) {NameRepository namesRepository = new NameRepository();for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){String name = (String)iter.next();System.out.println("Name : " + name);} }
}
步骤 4
执行程序,输出结果:Name : Robert
Name : John
Name : Julie
Name : Lora
这段代码是一个简单的迭代器模式的示例。以下是对代码的解释:步骤1:定义接口Iterator 接口定义了迭代器的基本方法,包括 hasNext() 方法用于检查是否有下一个元素,以及 next() 方法用于获取下一个元素。Container 接口定义了获取迭代器的方法 getIterator()。步骤2:创建实体类NameRepository 是实现了 Container 接口的具体类。
NameRepository 内部定义了一个私有的内部类 NameIterator,它实现了 Iterator 接口,用于遍历 names 数组中的元素。
NameIterator 类中的 index 变量用于追踪当前迭代的位置。
hasNext() 方法检查是否还有下一个元素,如果 index 小于 names 数组的长度,则返回 true。
next() 方法返回当前位置的元素,并将 index 递增。
步骤3:使用迭代器在 IteratorPatternDemo 类的主方法中,首先创建一个 NameRepository 对象 namesRepository。
然后通过调用 namesRepository 的 getIterator() 方法获取一个迭代器对象 iter。
最后使用 iter 迭代器进行循环遍历,通过调用 hasNext() 方法检查是否有下一个元素,然后调用 next() 方法获取下一个元素。
将获取的元素打印出来。
步骤4:输出结果执行程序后,将依次输出数组 names 中的每个元素。
这段代码演示了如何使用迭代器模式来遍历和获取集合中的元素,它提供了一种统一的方式来访问不同种类的集合或数据结构。