java-设计模式(行为型)-【迭代器模式】

1.迭代器模式(IteratorMode)

   定义:迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常。

           既有两个对象:一是聚集对象:需要遍历的对象。二是迭代器对象:用于对聚集对象进行遍历访问

   关系图:

            

2.例子

    2.1 集合

//集合接口:获取,长度方法
public interface Collection {
    //集合长度
	int size();
	//获取元素
	char get(int pos);
	//添加元素
	void put(char c);
	//获取迭代器
	Iterator iterator();
}
//集合子类
class MyCollection implements Collection
{   
    //存放元素集合
	StringBuilder sb=new StringBuilder();
	//获取长度
	@Override
	public int size() {
		// TODO Auto-generated method stub
		return sb.length();
	}
    //获取元素
	@Override
	public char get(int pos) {
		// TODO Auto-generated method stub
	    if(pos>=0&&pos<=sb.length()-1)
		return sb.charAt(pos);
	
	    return (Character) null;
	}
	//创建一个自己的Iterator并返回
	@Override
	public Iterator iterator() {
		// TODO Auto-generated method stub
		return new MyIterator(this);
	}
    //添加元素
	@Override
	public void put(char c) {
		// TODO Auto-generated method stub
		sb.append(c);
	}
}

  2.2 迭代器

//迭代器接口
public interface Iterator {
   
	boolean hasNext();//判断是否有下一个字符
	char next();//前一个字符
	char previous();//后一个字符
	char first();//返回第一个字符
}

class MyIterator implements Iterator
{
	Collection c=null;
	//指针:指向元素的下标
	int pos=-1;
	public MyIterator(Collection c)
	{
		this.c=c;
	}
	@Override
	public boolean hasNext() {
		// 指针下移,并判断该指针是否存在
		pos++;
		if(pos<c.size())
		  return true;
		return false;
	}
	@Override
	public char next() {
		// TODO Auto-generated method stub
		return c.get(pos);
	}
	@Override
	public char previous() {
		// TODO Auto-generated method stub
		return c.get(pos-1);
	}
	@Override
	public char first() {
		// TODO Auto-generated method stub
		return c.get(0);
	}
}

  2.3 测试

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Collection mycol=new MyCollection();
        mycol.put('a');
        mycol.put('b');
        mycol.put('c');
        Iterator it=mycol.iterator();
        System.out.print("打印集合:");
        while(it.hasNext())
        {
        	char c=it.next();
        	System.out.print(c);
        }
	}
}

  2.4 运行结果

打印集合:abc

  

      

 

posted @ 2015-04-20 11:56  beyondbycyx  阅读(124)  评论(0编辑  收藏  举报