Iterator 迭代器设计模式

这个模式是在复习java的集合类时候发现的,有一句话是

        Iterator iterator = c.iterator();

这句话的意思就是获取他的迭代器,可以通过迭代器hasNext判断集和里是否有元素,next返回集合中元素。
由于不同的collection有不有同的遍历操作,为了统一接口。添加每个实现 collection接口的类都要实现Iterator。这样就提供了统一的方法,遍历数据。给编程者带来方便。这种做法也被 称作为 Iterator 设计模式。

Iterator的特点:

定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

类图:

这里写图片描述
这张图完整的勾勒了各个类接口之间的关系。
首先说明Aggregate是容器接口,
ConcreteAggregate是容器接口实现,
Iterator是迭代器接口,
ConcreteIterator是迭代器接口的实现;


在Aggregate里面定义了iterator()方法,因此在它的实现类ConcreteAggregate中需要实现该方法,并返回了一个迭代器的的实例ConcreteIterator(list)。
迭代器的实现类的构造函数中有list,该list就是该容器的一个实例,因此

        Iterator iterator = c.iterator();

这样就可以直接访问到该容器的内部的内容,而在外部不暴露出来
其次提供了统一的接口访问不同的容器


代码实现:

容器接口

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

容器实现

public class ConcreteAggregate implements Aggregate{
    private List list = new ArrayList();

    @Override
    public void add(Object o){
        list.add(o);
    }
    @Override
    public void remove(Object o){
        list.remove(o);
    }
    @Override
    public Iterator iterator(){
        return new ConcreteIterator(list);
    }
}

迭代器接口

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

迭代器实现

public class ConcreteIterator implements Iterator{

    private int cursor =0;
    private List list = new ArrayList();

    public ConcreteIterator(List list) {
        this.list = list;
    }
    @Override
    public boolean hasNext() {
        if(cursor==list.size()){
            return false;
        }
        return true;
    }
    @Override
    public Object next() {
        Object obj = null;
        if(this.hasNext()){
            obj = this.list.get(cursor++);
        }
        return obj;
    }
}

测试类

public class Demo {
    public static void main(String[] args) {
        //Aggregate aggregate = new Aggregate(); Aggregate是一个接口不能被实例化
        Aggregate aggregate = new ConcreteAggregate();
        aggregate.add("小苍");
        aggregate.add("小井");
        aggregate.add("小空");

        Iterator iterator = aggregate.iterator();
        while (iterator.hasNext()){
            String s = (String) iterator.next();
            System.out.println(s);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值