迭代器模式(Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。

迭代器模式包含如下角色:
- Iterator: 抽象迭代器
- ConcreteIterator: 具体迭代器
- Aggregate: 抽象聚合类
- ConcreteAggregate: 具体聚合类
实例分析:

Aggregate
- package com.zzy.iterator;
- /**
- * 聚合对象抽象类
- * @author eason
- *
- * @param <E>
- */
- public interface Aggregate<E> {
- public Iterator<E> createIterator();
- }
ArrayAggregate
- package com.zzy.iterator;
- /**
- * 聚合对象抽象类,用一个数组来反映聚合对象
- * @author eason
- *
- * @param <E>
- */
- public class ArrayAggregate<E> implements Aggregate<E> {
- private Object[] objs;
- public ArrayAggregate(Object[] objs) {
- this.objs = objs;
- }
- public Iterator<E> createIterator() {
- return new ArrayIterator<E>(objs);
- }
- }
ListAggregate
- package com.zzy.iterator;
- import java.util.List;
- /**
- * 聚合对象抽象类,用一个List来反映聚合对象
- * @author eason
- *
- * @param <E>
- */
- public class ListAggregate<E> implements Aggregate<E> {
- private List<E> lists;
- public ListAggregate(List<E> lists) {
- this.lists = lists;
- }
- public Iterator<E> createIterator() {
- return new ListIterator<E>(lists);
- }
- }
Iterator
- package com.zzy.iterator;
- /**
- * 迭代器接口
- * @author eason
- *
- * @param <E>
- */
- public interface Iterator<E> {
- public boolean hasNext();
- public E next();
- }
ArrayIterator
- package com.zzy.iterator;
- /**
- * 数组型迭代器
- * @author eason
- *
- * @param <E>
- */
- public class ArrayIterator<E> implements Iterator<E> {
- private Object[] obj;
- int position;
- public ArrayIterator(Object[] obj) {
- this.obj = obj;
- }
- @Override
- public boolean hasNext() {
- if(obj != null && position < obj.length) {
- return true;
- }
- return false;
- }
- public E next() {
- return (E) obj[position++];
- }
- }
ListIterator
- package com.zzy.iterator;
- import java.util.List;
- /**
- * List型迭代器
- * @author eason
- *
- * @param <E>
- */
- public class ListIterator<E> implements Iterator<E> {
- private List<E> lists;
- int current;
- public ListIterator(List<E> lists) {
- this.lists = lists;
- }
- @Override
- public boolean hasNext() {
- if(current < lists.size()) {
- return true;
- }
- return false;
- }
- @Override
- public E next() {
- return lists.get(current++);
- }
- }
TestIterator
- package com.zzy.iterator;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 测试类
- * @author eason
- *
- */
- public class TestIterator {
- static String[] arrays = {"O1", "O2", "O3"};
- static List<String> lists = new ArrayList<String>();
- static {
- lists.add("L1");
- lists.add("L2");
- lists.add("L3");
- }
- public static void main(String[] args) {
- Iterator<String> arrayIterator = new ArrayAggregate<String>(arrays).createIterator();
- Iterator<String> listIterator = new ListAggregate<String>(lists).createIterator();
- printIterator(arrayIterator);
- printIterator(listIterator);
- }
- private static void printIterator(Iterator iterator) {
- while(iterator.hasNext()) {
- System.out.println(iterator.next());
- }
- }
- }
From: http://zy19982004.iteye.com/blog/1440030
http://wenku.baidu.com/view/916014373968011ca3009153.html
本文深入探讨了迭代器模式的原理与应用,通过Java代码实例展示了如何使用迭代器模式访问聚合对象,提供了聚合对象、迭代器接口及其实现类的详细实现方式。

798

被折叠的 条评论
为什么被折叠?



