【设计模式】行为型04迭代器模式(Iterator Pattern)

      学习地址:http://www.runoob.com/design-pattern/iterator-pattern.html

      迭代器模式,简单来说就是通过迭代的方式对集合进行遍历,在集合的学习中也一定会接触迭代遍历,原理是一样的。所以这里简单说一下,重在自己体会:

类图:


      实现:

1、迭代器接口:

package com.pat.iterator;
/**
 * 定义一个迭代器接口
 * @author zx
 *
 */
public interface Iterator {
	//是否有下一个元素
	public boolean hasNext();
	//获取下一个元素
	public Object next();
}

2、集合接口

package com.pat.iterator;
/**
 * 容器对象,持有自己的迭代器
 * @author zx
 *
 */
public interface Containter {
	public Iterator getIterator();
}

3、持有迭代器内部类的对象

package com.pat.iterator;
/**
 * 实际集合,包含一个具体的迭代器
 * @author zx
 *
 */
public class NameRepository implements Containter{
	//名称集合
	public String names[] = {"AA" , "BB" ,"CC" , "DD", "EE"};
	@Override
	public Iterator getIterator() {
		//返回一个迭代器对象
		return new NameIterator();
	}
	/**
	 * 内部类
	 */
	private class NameIterator implements Iterator{
		int index;
		@Override
		public boolean hasNext() {
			if(index<names.length) {
				return true;
			}
			return false;
		}

		@Override
		public Object next() {
			if(this.hasNext()){
				//返回下标的数据并且index+1
				return names[index++];
			}
			return null;
		}
		
	}

}

4、测试

package com.pat.iterator;

public class Test {
	public static void main(String[] args) {
		NameRepository nr = new NameRepository();
		Iterator iterator = nr.getIterator();
		while(iterator.hasNext()) {
			String name = (String)iterator.next();
			System.out.println("Name : " + name);
		}

		//		for(Iterator iter = nr.getIterator(); iter.hasNext();){
		//	         String name = (String)iter.next();
		//	         System.out.println("Name : " + name);
		//	      }    
	}
}

5、结果

Name : AA
Name : BB
Name : CC
Name : DD
Name : EE

posted @ 2018-05-03 18:33  黑猫先生  阅读(120)  评论(0编辑  收藏  举报