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

Java设计模式之迭代器模式

17-09-14        来源:[db:作者]  
收藏   我要投稿

迭代器模式(iterator)

概念:

提供一种一致的方法来顺序遍历一个容器中的所有元素

适用:

1.访问一个聚合对象的内容而无需暴露它的内部表示。

2.支持对聚合对象的多种遍历。

3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。

迭代器模式的优缺点

迭代器模式的优点:

简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

迭代器模式的缺点: 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合。
这里写图片描述

示例代码:

/**
 * 迭代器接口
 */
public interface Iterator {  
    //前移  
    public Object previous();      
    //后移  
    public Object next();  
    public boolean hasNext();     
    //取得第一个元素  
    public Object first();  
}
/**
 * 聚集接口
 */
public interface Aggregate {  
    public Iterator CreateIterator();  
    /*取得集合元素*/  
    public Object get(int i);  
    /*取得集合大小*/  
    public int size();  
} 
/**
 * 具体迭代器类
 */
public class ConcreteIterator implements Iterator {  
    private Aggregate collection;  
    private int pos = -1;  
    public ConcreteIterator(Aggregate collection){  
        this.collection = collection;  
    }  
    public Object previous() {  
        if(pos > 0){  
            pos--;  
        }  
        return collection.get(pos);  
    }  
    public Object next() {  
        if(pos
/**
 * 具体聚集类
 */
public class ConcreteAggregate implements Aggregate {  
    public String string[] = {"A","B","C","D","E"};  
    public Iterator CreateIterator() {  
        return new ConcreteIterator(this);  // 把数组传进
    }  
    public Object get(int i) {  
        return string[i];  
    }  
    public int size() {  
        return string.length;  
    }  
}
/**
 * 迭代器模式的测试
 * 实现 :遍历集合
 */
public class Test {  
    public static void main(String[] args) {  
        Aggregate aggregate = new ConcreteAggregate();  
        Iterator it = aggregate.CreateIterator();  
        while(it.hasNext()){  
            System.out.println(it.next());  
        }  
    }  
}
相关TAG标签
上一篇:delphi 多线程详解及其详解例子
下一篇:AQS原理解析
相关文章
图文推荐

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

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