8、迭代器模式

一、迭代器模式概念:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

 

二、迭代器的角色构成

  (1)、迭代器角色

  (2)、具体迭代器角色

  (3)、容器角色

  (4)、具体容器角色

 

三、迭代器模式的优缺点

  优点:1、简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但是用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器就简单的多了

    2、封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。

    3、可以提供多种遍历方法,正序倒序都可以。

  缺点:1、对于简单的遍历,使用迭代器会繁琐,像ArrayList,我们宁可使用for循环和get方法来遍历集合

    

四、实现

package Iterator;

/**
 * Created by Administrator on 2018/3/3 0003.
 */
public interface MyList {
    public void add(Object object);
    public Object get(int index);
    public MyIterator iterator();
    public int getSize();
}
package Iterator;

/**
 * Created by Administrator on 2018/3/3 0003.
 */
public class ConList implements MyList{
    Object obj[];
    int size=0;
    int index=0;
    public ConList(){
        obj=new Object[100];
    }
    @Override
    public void add(Object object) {
        obj[index++]=object;
        this.size++;
    }

    @Override
    public Object get(int index) {
        if(obj[index]!=null){
            return obj[index];
        }
        return null;
    }

    @Override
    public ConIterator iterator() {
        return new ConIterator(this);
    }

    @Override
    public int getSize() {
        return this.size;
    }
}
package Iterator;

/**
 * Created by Administrator on 2018/3/3 0003.
 */
public interface MyIterator {
    public boolean hasNext();
    public Object Next();
}
package Iterator;

/**
 * Created by Administrator on 2018/3/3 0003.
 */
public class ConIterator implements MyIterator{
    private int index=0;
    private ConList list;
    public ConIterator(ConList list){
        this.list=list;
    }
    @Override
    public boolean hasNext() {
        if(index>=list.size){
           return false;
        }
        return true;
    }

    @Override
    public Object Next() {
        Object obj=list.get(index++);
        return obj;
    }
}
package Iterator;

/**
 * Created by Administrator on 2018/3/3 0003.
 */
public class Test {
    public static void main(String[] args) {
        ConList list=new ConList();
        MyIterator iterator=list.iterator();
        list.add("asd");
        list.add("asdd");
        while(iterator.hasNext()){
            System.out.println(iterator.Next());
        }
    }
}

 

posted @ 2018-03-07 20:28  彩电  阅读(110)  评论(0编辑  收藏  举报