设计模式:迭代器模式-interator

提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部结构

这里写图片描述
主要分成2部分:aggregate-容器,内有增加删除容器内容等方法,还有一个生成迭代器的方法;iterator-迭代器,实际上就是一个指针,内有移动指针以及返回当前元素等方法

迭代器模式的优点:

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

可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。

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

迭代器模式的缺点:

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

代码

Main

public class Main {

    public static void main(String[] args) {
        Aggregate ag=new ConcreteAggregate();
        ag.add("he");
        ag.add("jingdong");

        Iterator it=ag.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

}

interface:Aggregate

public interface Aggregate {
    public void add(Object o);
    public void remove(Object o);
    public Iterator iterator();
}

interface:Iterator

public interface Iterator {
    public Object next();
    public boolean hasNext();
}

imp:ConcreteAggregate

public class ConcreteAggregate implements Aggregate {

    private ArrayList<Object> list=new ArrayList<Object>();
    @Override
    public void add(Object o) {
        this.list.add(o);
    }

    @Override
    public void remove(Object o) {
        this.list.remove(o);
    }

    @Override
    public Iterator iterator() {
        return new ConcreteIterator(this.list);
    }

}

imp:ConcreteIterator

public class ConcreteIterator implements Iterator {

    private ArrayList<Object> list=new ArrayList<Object>();
    private int cursor=0;

    public ConcreteIterator(ArrayList<Object> list){
        this.list=list;
    }

    @Override
    public Object next() {
        if(this.hasNext()){
            return this.list.get(cursor++);
        }
        return null;
    }

    @Override
    public boolean hasNext() {
        if(this.cursor==this.list.size())
            return false;
        return true;
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值