迭代器模式-Iterator
Posted rouqinglangzi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器模式-Iterator相关的知识,希望对你有一定的参考价值。
一、定义
迭代器模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
二、结构
(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:
- next():获取下一个元素的方法,
- hasNext():判断是否遍历结束的方法
- remove():移出当前对象的方法
(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。
(3)容器角色(Aggregate): 一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等
(4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
三、例子
抽象的集合
/** * 抽象的聚集。(可以理解为Java中的Collection接口) */ public interface Aggregate //返回迭代器 Iterator iterator();
抽象的迭代器
/** * 抽象的迭代器 */ public interface Iterator //移动到第一个元素 void first(); //是否还有元素 boolean hasNext(); //返回下一个元素 Object next();
具体的集合
/** * 具体的聚集(可以理解为Java中的Collection的实现类) */ public class ConcreteAggregate implements Aggregate private Object[] list = "zhangsan", "lisi", "wangwu", "zhaoliu"; public Object getElement(int index) if (index < list.length) return list[index]; //越界 return null; public int size() return list.length; /** * 由当前具体的聚集返回迭代器 */ @Override public Iterator iterator() return new ConcreteIterator(this);
具体的迭代器
/** * 具体的迭代器 */ public class ConcreteIterator implements Iterator private ConcreteAggregate concreteAggregate; private int index; private int size; public ConcreteIterator(ConcreteAggregate concreteAggregate) this.concreteAggregate = concreteAggregate; size = concreteAggregate.size(); index = 0; @Override public void first() index = 0; @Override public boolean hasNext() return index < size; @Override public Object next() return concreteAggregate.getElement(index++);
客户端代码
public class Client public static void main(String[] args) Aggregate aggregate = new ConcreteAggregate(); Iterator iterator = aggregate.iterator(); while (iterator.hasNext()) Object element = iterator.next(); System.out.println(element); 打印结果: zhangsan lisi wangwu zhaoliu
以上是关于迭代器模式-Iterator的主要内容,如果未能解决你的问题,请参考以下文章