亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java設計模式(17)----------迭代器模式

介绍

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

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

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

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

案例
背景

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

实现

迭代器接口

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

Process finished with exit code 0

扩展

java本身有提供Iterable接口,其中包含iterator()方法,可以用于为用户自定义的集合装备迭代器,非常方便。并且在此基础上,可以实现自定义集合类对于foreach关键字的支持。有兴趣的朋友可以看一下之前写过的一片博文《Java语言基础----------foreach原理》详细分析了foreach的实现原理。对于java本身的Iterable感兴趣的朋友,可以看一下java中各种Map或者Set的源码。

总结

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

點擊查看更多內容
4人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
1萬
獲贊與收藏
1426

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消