频道栏目
首页 > 资讯 > Java > 正文

Java设计模式(16)行为型:迭代器模式

16-12-31        来源:[db:作者]  
收藏   我要投稿

迭代器模式提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。访问一个聚合对象的内容而无需暴露它的内部表示
支持对聚合对象的多种遍历,为遍历不同的聚合结构提供一个统一的接口。

迭代器模式可以直接使用原生JDK中提供的方法:java.util.Iterator;,如:

import java.util.ArrayList;
import java.util.Iterator;

/**
 * 原生的迭代器用法
 */
public class UtilIteratorTest {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		ArrayList<string> array = new ArrayList<string>();
		array.add("a");
		array.add("b");
		array.add("c");
		array.add("d");
		Iterator<string> it = array.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}

也可自定义MyIterator实现:

Iterator:自定义迭代器接口

public interface Iterator {
	// 前移
	public Object previous();

	// 后移
	public Object next();
	
	// 是否还有下个元素
	public boolean hasNext();

	// 取得第一个元素
	public Object first();
}

Collection:定义一个用来处理集合接口

public interface Collection {
	public Iterator iterator();

	/* 取得集合元素 */
	public Object get(int i);

	/* 取得集合大小 */
	public int size();
}

MyIterator:实现迭代器接口

public class MyIterator implements Iterator {    
    private Collection collection;    
    private int pos = -1;    
    public MyIterator(Collection collection){    
        this.collection = collection;    
    }    
        
    @Override    
    public Object previous() {    
        if(pos > 0){    
            pos--;    
        }    
        return collection.get(pos);    
    }    
    
    @Override    
    public Object next() {    
        if(pos<collection.size()-1){    
            pos++;    
        }    
        return collection.get(pos);    
    }    
    
    @Override    
    public boolean hasNext() {    
        if(pos<collection.size()-1){    
            return true;    
        }else{    
            return false;    
        }    
    }    
    
    @Override    
    public Object first() {    
        pos = 0;    
        return collection.get(pos);    
    }    
    
}

MyCollection:实现该集合接口

public class MyCollection implements Collection {    
    public String[] string = {};    
      
    public MyCollection(String[] array){  
        string = array;  
    }  
      
    @Override    
    public Iterator iterator() {    
        return new MyIterator(this);    
    }    
    
    @Override    
    public Object get(int i) {    
        return string[i];    
    }    
    
    @Override    
    public int size() {    
        return string.length;    
    }    
}

执行过程:

String[] array = { "A", "B", "C", "D", "E" };  
Collection collection = new MyCollection(array);  
Iterator it = collection.iterator();  
  
while (it.hasNext()) {  
    System.out.println(it.next());  
} 

执行结果:

A  
B  
C  
D  
E 
相关TAG标签
上一篇:springmvc邮件发送(找回密码)
下一篇:手动创建第一个Maven案例
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站