迭代器模式

本文介绍了如何使用抽象聚合和具体迭代器的设计模式,通过定义操作如存储、添加和删除,实现对集合对象的有序访问,同时保持了内部结构的隐藏。实例展示了在Java中创建抽象接口和实现类的过程,以及在实际应用中的遍历和统一接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

提供一个对象来顺序访问聚合对象中的所有数据,不暴露聚合对象的内部表示

架构

抽象聚合:定义操作【存储、添加、删除】聚合对象以及创建迭代器对象
具体聚合:返回一个具体的迭代器;
抽象迭代器:定义访问和遍历聚合元素的接口,通常包含hasNext()、first()、next() 等方法;
具体迭代器:完成对聚合对象的遍历,记录遍历的当前位置

应用场景

1、对一组元素提供多种遍历方式
2、遍历不同组提供的一个统一接口
3、访问一组元素中的一个对象的内容而无需暴露内部细节

代码

在这里插入图片描述
Aggregate(抽象聚合)

/**
 * 抽象聚合
 * */
public interface Aggregate {

    void add(Object o);

    void remove(Object o);

    Iterator getIterator();

}

ConcreteAggregate(具体聚合)

/**
 *
 * Description:
 *          具体聚合
 * @author: mushi
 * @Date: 2021/2/22 14:47
 */
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 getIterator() {
        return new ConcreteIterator(list);
    }
}

ConcreteIterator(具体迭代器)

/**
 *
 * Description:
 *      具体迭代器
 * @author: mushi
 * @Date: 2021/2/22 14:49
 */
public class ConcreteIterator implements Iterator {

    private List list = null;
    private int index = -1;

    public ConcreteIterator(List list) {
        this.list = list;
    }

    @Override
    public Object first() {
        this.index = 0;
        return list.get(index);
    }

    @Override
    public Object next() {
        Object o = null;
        if (this.hasnext()){
            o =  list.get(++index);
        }
        return o;
    }

    @Override
    public Object last() {
        index = list.size()-1;
        return list.get(index);
    }

    @Override
    public boolean hasnext() {
        if (index<list.size()-1){
            return true;
        }else {
            return false;
        }
    }
}

Iterator(抽象迭代器)

/**
 * 抽象迭代器
 * */
public interface Iterator {

    Object first();

    Object next();

    Object last();

    boolean hasnext();

}

Test

public class Test {

    public static void main(String[] args) {

        //创建一个对象聚合,并往聚合中添加数据
        String s1 = "1";
        String s2 = "2";
        String s3 = "3";
        Aggregate aggregate = new ConcreteAggregate();
        aggregate.add(s1);
        aggregate.add(s2);
        aggregate.add(s3);

        //获取聚合的迭代器,通过迭代器访问聚合内的数据
        Iterator iterator = aggregate.getIterator();

        System.out.println(iterator.first());
        System.out.println(iterator.next());
        System.out.println(iterator.last());
        System.out.println(iterator.hasnext());
    }

}

总结

其实有jdk自带的iterator()迭代器基本就够了,,无非就是封装一个操作容器的工具类,可以通过这个工具类来操作容器内的元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值