迭代器模式--没错就是Iterator

来源:互联网 发布:神奇的印度人 知乎 编辑:程序博客网 时间:2024/05/23 19:13

相信Java中的Iterator很多人都用过,而本文却不是介绍Iterator的,

而是介绍Iterator中用到的迭代器模式。

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,

而又不暴露该对象的内部表示。

一个聚集对象,而不管这些对象是什么都需要遍历的时候,你就应该考虑用

迭代器模式。

下面看看类图吧:



类图结构还是比较简单的,左边两个

Aggregate:聚集的抽象父类,用于定义规范

ConcreteAggregate:聚集的实际实现类

右边两个

Iterator:迭代器的抽象类,用于定义相关方法。

ConcreteIterator:具体的迭代器实现类。


下面看类代码:

Iterator类:

package com.blog.anla.Iterator;/** * 迭代器抽象类,用于定义开始对象,得到下一个对象,判断是否到尾等 * 抽象方法 * @author U-ANLA * */public abstract class Iterator {public abstract Object first();public abstract Object next();public abstract boolean isOver();public abstract Object currentItem();}


Aggregate类:

package com.blog.anla.Iterator;/** * 聚集抽象类 * @author U-ANLA * */public abstract class Aggregate {public abstract Iterator createIterator();}


ConcreteIterator类:

package com.blog.anla.Iterator;/** * 具体的迭代器 * @author U-ANLA * */public class ConcreteIterator extends Iterator{private ConcreteAggregate aggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate aggregate){this.aggregate = aggregate;}@Overridepublic Object first() {return aggregate.getItems().get(0);}@Overridepublic Object next() {Object ret = null;current++;if(current < aggregate.count()){ret = aggregate.getItems().get(current);}return ret;}@Overridepublic boolean isOver() {return current >= aggregate.count() ? true : false;}@Overridepublic Object currentItem() {return aggregate.getItems().get(current);}}


ConcreteAggregate类:

package com.blog.anla.Iterator;import java.util.ArrayList;import java.util.List;/** * 具体的待遍历的类 * @author U-ANLA * */public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator createIterator() {return new ConcreteIterator(this);}public int count(){return items.size();}public List<Object> getItems() {return items;}public void setItems(List<Object> items) {this.items = items;}}


有木有看完这篇一起去看看Java中Iterator实现原理呢?

赠人玫瑰手留余香(oo)


原创粉丝点击