Java设计模式-----Iterator迭代器模式
来源:互联网 发布:尤尼克斯淘宝正品店 编辑:程序博客网 时间:2024/05/02 01:48
Iterator模式定义:
提供一个方法顺序访问一个聚合对象的各个元素,而又不暴露该对象的内部表示。
这个模式在java的类库中已经实现了,在java中所有的集合类都实现了Conllection接口,而Conllection接口又继承了Iterable接口,该接口有一个iterator方法,也就是所以的集合类都可以通过这个iterator方法来转换成Iterator类,用Iterator对象中的hasnext方法来判断是否还有下个元素,next方法来顺序获取集合类中的对象。
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模式主要用在当一个集合类中的元素经常变动时,而不需要改变客户端的代码。
- Java设计模式-----Iterator迭代器模式
- JAVA设计模式---Iterator迭代器模式
- Java设计模式-----Iterator迭代器模式
- JAVA设计模式六--Iterator(迭代器模式)
- java设计模式-迭代器模式(Iterator)
- JAVA设计模式—迭代器模式(Iterator)
- Java设计模式五:迭代器模式(Iterator)
- JAVA设计模式六:--Iterator(迭代器模式)
- java设计模式之迭代器模式iterator
- 【Java设计模式】(1)迭代器模式Iterator
- java设计模式-迭代器模式(Iterator)
- java设计模式:迭代器模式 iterator
- Java设计模式--迭代器模式【Iterator Pattern】
- JAVA设计模式-Iterator
- JAVA Iterator 设计模式
- 设计模式 - 迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解
- 设计模式 -- Iterator(迭代器)
- Iterator(迭代器)设计模式
- Java设计模式-----Singleton模式
- Java设计模式-----Template Method模式
- Java设计模式-----Factory Method模式
- Java设计模式-----Prototype原型模式
- Java设计模式-----Builder建造者模式
- Java设计模式-----Iterator迭代器模式
- ORA-28001: the password has expired
- B编码(Bencode)解析
- 使用ASP.NET上传多个文件到服务器(一)
- 在ASP.NET中实现多文件上传(二)
- 【水晶玻璃鞋 7】网络端口
- 10 个很棒的 jQuery 代码片段
- Serializable 作用
- 2011年度最佳 jQuery 插件发布