迭代器模式/iterator模式/对象行为型模式

时间:2021-11-20 20:16:50

意图

又名:游标(Cursor);

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

动机

一个聚合对象,提供访问元素的方法,而有不暴露它的内部结构。如list,将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)中。迭代器定义了一个访问该列表元素的接口。迭代器负责跟踪当前元素。

java实现要素:迭代器接口+迭代器+集合接口+集合实现

  1. 集合接口中定义,返回迭代器的接口方法
  2. 集合对象中具体实现返回的迭代器

代码实现

//迭代器接口
public interface Iterator <T>{
boolean hasNext();
T next();
T get(int index);
} //集合接口
public interface List <T>{
Iterator<T> iterator();
public T get(int i);
public int size();
} //集合实现,采用内部类实现迭代器。内部类可以操作外部类数据(私有数据)。
public class MyList implements List<String>{
private String[] data = {"A","B","C","D","E"};
public Iterator<String> iterator(){
return new itr();
} public String get(int i){
return data[i];
} public int size(){
return data.length;
} private class itr implements Iterator<String>{
private int pos=-1;
@Override
public boolean hasNext() {
if (pos<data.length-1) {
return true;
}
return false;
} @Override
public String next() {
if (pos<data.length-1) {
++pos;
}
return data[pos];
} @Override
public String get(int index) {
if (index<data.length) {
return data[pos];
}
return "";
}
}
} //测试
public class Test {
public static void main(String[] args) {
MyList myList=new MyList();
Iterator<String> iterator=myList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}

迭代器模式/iterator模式/对象行为型模式

JDK中的迭代器模式

整个JCF,遍地都是.....

 * @see     Set
* @see List
* @see Map
* @see SortedSet
* @see SortedMap
* @see HashSet
* @see TreeSet
* @see ArrayList
* @see LinkedList
* @see Vector
* @see Collections
* @see Arrays
* @see AbstractCollection
* @since 1.2
*/ public interface Collection<E> extends Iterable<E> {