Java设计模式----------迭代器模式

1、介绍

迭代器模式的思想是将集合或者容器类中的对象遍历的职责分离出来,使用迭代器来进行负责。从而能够在顺序遍历集合或者容器的时候,无需关注其内部的细节和实现。

实现:迭代器模式中的关键实现包含一下几点:

  • 集合或者容器类中包含内部类(迭代器类需要感知集合类的保存数据的形式和集合中元素数量),为迭代器的实现类
  • 集合或者容器类中包含获取迭代器类对象的方法
  • 迭代器抽象接口中包含hasNextnext方法,对应检测集合中是否还存在下一个元素的方法和获取下一个元素的方法。

使用场景:需要遍历集合或者容器类,但是却无需了解其内部实现的情况。最广泛的应用就是Java中的iterator在Map,Set等集合中的应用,使得遍历集合非常方便。

2、案例

2.1、背景

迭代器是一种抽象的概念,所以迭代器模式在生活场景中基本没有对应场景,主要应用在软件设计中。所以我们直接举一个软件设计中的例子。我们需要保存若干个地点的名字,并且对这个集合进行遍历。

2.2、实现

迭代器接口

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

容器接口

public interface Container
{
    Iterator getIterator();
}

容器实现类

public class PlaceContainer implements Container
{
    private String[] places;

    public PlaceContainer(String[] places)
    {
        this.places = places;
    }

    @Override
    public Iterator getIterator()
    {
        return new PlaceIterator();
    }

    private class PlaceIterator implements Iterator
    {
        private int index;

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

        @Override
        public Object next()
        {
            return places[index++];
        }
    }
}

验证程序

public class Demo
{
    public static void main(String[] args)
    {
        String[] places = new String[]{"beijing", "tianjin", "xian", "shanghai", "guangzhou"};
        PlaceContainer placeContainer = new PlaceContainer(places);
        for (Iterator iterator = placeContainer.getIterator();iterator.hasNext();)
        {
            System.out.println(iterator.next());
        }
    }
}

输出

beijing
tianjin
xian
shanghai
guangzhou

3、扩展

java本身有提供Iterable接口,其中包含iterator()方法,可以用于为用户自定义的集合装备迭代器,非常方便。并且在此基础上,可以实现自定义集合类对于foreach关键字的支持。对于java本身的Iterable感兴趣的朋友,可以看一下java中各种Map或者Set的源码。

4、总结

迭代器模式用于顺序遍历集合类,却不暴露集合内部逻辑,分离了数据遍历职责。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值