Iterator模式定义:
提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。今天面试考到设计模式,我愣是没答上来,我晕死,自己这几天刚学的东西,自己也都理解,可一到考试的时候不是忘了就是回答的不准确,自己也不清楚到底是为什么,哎,伤心。。。。。。,下面是Iterator模式的结构图:
在这个结构图中的Aggregate抽象类也可以定义成接口。下面给出一个例子来说明Iterator模式的使用。
import java.util.ArrayList;
interface Iterator<E>{
public void first();
public void next();
public E currentItem();
public boolean isDone();
}
class ConcreteIterator<E> implements Iterator<E>{
private ConcreteAggregate<E> agg;
private int index=0;
private int size=0;
public ConcreteIterator( ConcreteAggregate<E> aggregate) {
this.agg=aggregate;
this.index=0;
this.size=aggregate.size();
}
public E currentItem() {
return agg.getElement(index);
}
public void first() {
index=0;
}
public boolean isDone() {
if(index>=size){
return true;
}
return false;
}
public void next() {
if(index<size){
index++;
}
}
}
abstract class Aggregate<E>{
protected abstract Iterator createIterator();
}
class ConcreteAggregate<E> extends Aggregate<E>{
private ArrayList<E> arrayList=new ArrayList<E>();
public Iterator createIterator() {
return new ConcreteIterator<E>(this);
}
public void add(E o){
arrayList.add(o);
}
public E getElement(int index) {
if (index<arrayList.size()) {
return arrayList.get(index);
} else {
return null;
}
}
public int size(){
return arrayList.size();
}
}
public class Client {
public static void main(String[] args) {
ConcreteAggregate<String> aggregate=new ConcreteAggregate<String>();
aggregate.add("A");
aggregate.add("B");
aggregate.add("C");
aggregate.add("D");
aggregate.add("E");
Iterator iterator=aggregate.createIterator();
for(iterator.first();!iterator.isDone();iterator.next()){
System.out.println(iterator.currentItem());
}
}
}
输出结果:
A
B
C
D
E
在这个例子中,我们按照Iterator模式的结构图来创建的例子,我们创建的集合ConcreteAggregate可以存放任何类型的数据,然后使用createIterator方法转换成Iterator对象,使用Iterator对象来按顺序显示集合中的内容。这个模式在Java的jdk中是这样实现的,所以的集合类都实现了Iterable接口,这个接口中有一个iterator方法可以把集合类的对象转换成Iterator类的对象。明白这个原理可以更好的理解Java中的集合类和迭代器,根据这个可以创建功能更加强大的集合类。
小结:Iterator模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。
分享到:
相关推荐
23种设计模式之迭代器模式对迭代器模式进行了简单的介绍,并附带了例子程序,和大家分享
设计模式之迭代器模式(新) 设计模式之迭代器模式(新)
深入浅出Java设计模式之迭代器模式 _天极网
java设计模式之迭代器模式,从生活中的例子举例说明迭代器模式。
深入浅出学习Java设计模式之迭代器模式
迭代器(Iterator) 用意:可以顺序地访问一个集合中的元素而不必暴露集合中的内部表象。
深入浅出学习Java设计模式之迭代器模式[参考].pdf
这份文档以例子的形式讲诉了设计模式之迭代器与组合模式,希望可以帮助学习的人!
迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List、Map、数组等,我们知道对容器对象的访问必然会涉及遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法。如果我们将...
本文实例讲述了Python设计模式之迭代器模式原理与用法。分享给大家供大家参考,具体如下: 迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式...
设计模式的迭代器模式的例子,希望对大家有用~~~~~~~~
主要为大家详细介绍了javascript设计模式之迭代器模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了C++设计模式之迭代器模式Iterator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
设计模式-迭代器模式(讲解及其实现代码)
主要介绍了C++设计模式之迭代器模式,本文讲解了什么是迭代器模式、迭代器模式的代码实例等内容,需要的朋友可以参考下
迭代器设计模式代码示例--以最简单的代码诠释迭代器设计模式
主要为大家详细介绍了PHP设计模式之迭代器模式,感兴趣的小伙伴们可以参考一下