设计模式-迭代器模式

一、迭代器模式介绍

迭代器模式(Iterator Pattern)是 Java.Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示,它属于行为型模式

迭代器模式角色:

  • Iterator(迭代器):迭代器定义访问和遍历元素的接口。
  • ConcreteIterator (具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置。
  • Aggregate (聚合):聚合定义创建相应迭代器对象的接口。
  • ConcreteAggregate (具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。

此处我们有一个诉求:

  • 使用迭代器模式,进行数组遍历。

二、迭代器模式使用

2.1 示例关系:

2.2 代码实现:

/* *
 * 1. 迭代器接口接口(Iterator)。
 */

interface Iterator {

    /* *
     * 判断集合是否还有元素可以遍历。
     */

    boolean hasNext();

    /* *
     * 返回迭代的下一个元素。
     */

    Object next();
}



/* *
 * 2. 容器接口(Aggregate)。
 */

interface Container {

    /* *
     * 创建迭代器。
     */

    Iterator createIterator();
}



/* *
 * 3. 数组容器(ConcreteAggregate)实现容器接口。
 */

class ArrayContainer implements Container {

    /* *
     * 通过传入数组进行构造。
     */

    Object[] arrays;

    public ArrayContainer(Object[] arrays) {
        this.arrays = arrays;
    }

    @Override
    public Iterator createIterator() {
        return new ArrayIterator();
    }

    /* *
     * 遍历并打印元素方法。
     */

    public void printArrayElements(Iterator iterator) {
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
    }



    /* *
     * 4. 数组迭代器(ConcreteIterator)实现Iterator接口。
     *      此处使用到了私有内部类的方式。
     */

    private class ArrayIterator implements Iterator {

        int index = 0;

        @Override
        public boolean hasNext() {
            return index < arrays.length;
        }

        @Override
        public Object next() {
            if (this.hasNext()) {
                return arrays[index++];
            }
            return null;
        }

    }

}



/* *
 * 5. 客户端调用。
 */

public class Client {

    public static void main(String[] args) {

        // 创建一个数组。
        Object[] arrays = new Object[]{0, 1, 2, 3, 4, "str"};

        // 通过具体的聚合对象,来创建对应的具体迭代器。
        ArrayContainer arrayContainer = new ArrayContainer(arrays);
        Iterator iterator = arrayContainer.createIterator();

        // 遍历元素。
        arrayContainer.printArrayElements(iterator);
        // 0 1 2 3 4 str

    }

}

三、迭代器模式总结

优点

  • 客户端只需要使用迭代器,不用关心内部结构。
  • 提供了统一的方法遍历。
  • 管理对象集合遍历对象集合责任分开,若集合变更则只影响到聚合对象,若遍历方式变更,则只影响到迭代器。
  • 当需要展示一组相似或者相同对象时,适合使用迭代器模式。

缺点

  • 每个聚合对象都需要一个迭代器,会生成多个迭代器不方便管理类。

应用场景

  • JDKArrayList集合应用到了该模式。

四、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值