迭代器模式(Iterator Pattern)
Posted handler4j
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器模式(Iterator Pattern)相关的知识,希望对你有一定的参考价值。
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
简单的说,使用迭代器的遍历方法遍历目标对象,而不是从对象直接获取。
获取迭代器的方法有两种(也许有更多),如JDK中集合对象可以直接获取内部迭代器;也可以采用将对象以参数的形式传入到迭代器对象中。下面看代码:
1,聚合对象
/** * 内部封装遍历器的聚合类的抽象父类 */ public abstract class Aggregate { protected Object[] list; protected int size,index; public abstract void add(Object obj); public abstract Object get(int index); public abstract Iterator iterator(); public abstract int getSize(); }
/** * 聚合类的具体实现 */ public class ConcreteAggregate extends Aggregate { public ConcreteAggregate() { index=0; size=0; list=new Object[100]; } @Override public void add(Object obj) { list[index++] = obj; size++; } @Override public Object get(int index) { return list[index]; } @Override public Iterator iterator() { return new ConcreteIterator(this); } @Override public int getSize() { return size; } }
2,迭代器接口和实现
public interface Iterator { boolean hasNext(); Object next(); }
/** * 具体迭代器 */ public class ConcreteIterator implements Iterator { private Aggregate aggregate = null; private int index; public ConcreteIterator(Aggregate aggregate) { this.aggregate = aggregate; } @Override public boolean hasNext() { return index>=aggregate.getSize()?false:true; } @Override public Object next() { return aggregate.get(index++); } }
3,测试结果
public class IteratorPattern { public static void main(String[] args) { Aggregate aggregate = new ConcreteAggregate(); //创建聚合对象 aggregate.add("a"); aggregate.add("b"); aggregate.add("c"); aggregate.add("d"); //Iterator iterator = aggregate.iterator(); //获取聚合对象内部遍历器 Iterator iterator = new ConcreteIterator(aggregate); //作为参数传入遍历器 while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
4,控制台打印
a
b
c
d
Process finished with exit code 0
迭代器模式的好处,大概是直接使用方法进行遍历,而不用关心内部实现。
以上是关于迭代器模式(Iterator Pattern)的主要内容,如果未能解决你的问题,请参考以下文章
设计模式 - 迭代器模式(iterator pattern) 具体解释