1、迭代器模式的简介:

a、场景:

-  提供一种可以遍历聚合对象的方式。又称为:游标 cursor 模式。

-  聚合对象:存储数据

-  迭代器:遍历数据

2、简单的代码示例:

a、新建一个迭代器 MyIterator 接口,并创建一个 ConcreteMyAggregate 具体的聚合类,在聚合类中创建一个实现了 MyIterator 接口的内部类,这个内部类有一个 cursor 游标的成员变量(方便使用外部类的属性。) (迭代器的三个核心方法,next()、hasNext()、getCurrentObj() 方法。)

package com.geeklicreed.iterator;public interface MyIterator {	void first();	void next();	boolean hashNext();	boolean isFirst();	boolean isLast();		Object getCurrentObj();}
package com.geeklicreed.iterator;import java.util.ArrayList;import java.util.List;public class ConcreteMyAggregate {	private List list;	public ConcreteMyAggregate(ArrayList arrayList) {		super();		this.list = arrayList;	}	public void addList(Object obj) {		this.list.add(obj);	}	public void remove(Object obj) {		this.list.remove(obj);	}	public Object get(int index) {		return list.get(index);	}	public MyIterator createIterator() {		return new MyAggregateIterator();	}	class MyAggregateIterator implements MyIterator {		private int cursor = 0;		@Override		public void first() {			cursor = 0;		}		@Override		public void next() {			cursor++;		}		@Override		public boolean hashNext() {			return cursor < list.size() ? true : false;		}		@Override		public boolean isFirst() {			return cursor == 0 ? true : false;		}		@Override		public boolean isLast() {			return cursor == list.size() - 1 ? true : false;		}		@Override		public Object getCurrentObj() {			return list.get(cursor);		}	}}

    

3、看看 Client 测试类中输出的结果(类图不太好画,就不花了,看看就懂了把)

package com.geeklicreed.iterator;import java.util.ArrayList;public class Client {	public static void main(String[] args) {		ConcreteMyAggregate aggregate = new ConcreteMyAggregate(new ArrayList());		aggregate.addList("极客微信条");		aggregate.addList("熊猫烧香:如果我带来的只是灾难,是还愿不愿意陪我走完");		MyIterator iterator = aggregate.createIterator();		while(iterator.hashNext()){			System.out.println(iterator.getCurrentObj());			iterator.next();		}		/*输出结果为:		极客微信条		熊猫烧香:如果我带来的只是灾难,是还愿不愿意陪我走完*/	}}

4、开发中常见的场景:

-  JDK 内置的迭代器(List/Set)