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

意图

又名:游标(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());
		}
	}
}

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> {

posted @ 2016-09-22 17:50  toto怎么会喝醉  阅读(160)  评论(0编辑  收藏  举报