广告
返回顶部
首页 > 资讯 > 精选 >如何深入理解Java设计模式的迭代器模式
  • 770
分享到

如何深入理解Java设计模式的迭代器模式

2023-06-25 13:06:01 770人浏览 泡泡鱼
摘要

如何深入理解Java设计模式的迭代器模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是迭代器模式迭代器模式是针对集合对象而生的,对于集合对象而言,肯定

如何深入理解Java设计模式的迭代器模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

    一、什么是迭代器模式

    迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原则,所有我们要尽可能地分离这些职责,用不同的类取承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。

    定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

    二、迭代器模式的结构

    如何深入理解Java设计模式的迭代器模式

    抽象容器角色(Aggregate):负责提供创建具体迭代器角色的接口,一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。

    具体容器角色(ConcreteAggregate):就是实现抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkedList,Set接口的哈希列表的实现HashSet等。

    抽象迭代器角色(Iterator):负责定义访问和遍历元素的接口。

    具体迭代器角色(ConcreteIterator):实现迭代器接口,并要记录遍历中的当前位置。

    三、迭代器模式的使用场景

    访问一个集合对象的内容而无需暴露它的内部表示

    为遍历不同的集合结构提供一个统一的接口

    四、迭代器模式的优缺点

    优点:

    迭代器模式使得访问一个聚合对象的内容而无需暴露它的内部表示,即迭代抽象。

    迭代器模式为遍历不同的集合结构提供了一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作

    缺点:

    迭代器模式在遍历的同时更改迭代器所在的集合结构会导致出现异常。所以使用foreach语句只能在对集合进行遍历,不能在遍历的同时更改集合中的元素。

    五、迭代器模式的实现

    抽象聚合类

    public interface IListCollection{    Iterator GetIterator();}

    迭代器抽象类

    public interface Iterator{    bool MoveNext();    Object GetCurrent();    void Next();    void Reset();}

    具体聚合类

    public class ConcreteList : IListCollection{    int[] collection;    public ConcreteList()    {        collection = new int[] { 2, 4, 6, 8 };    }    public Iterator GetIterator()    {        return new ConcreteIterator(this);    }    public int Length    {        get { return collection.Length; }    }    public int GetElement(int index)    {        return collection[index];    }}

    具体迭代器类

    public class ConcreteIterator : Iterator{    // 迭代器要集合对象进行遍历操作,自然就需要引用集合对象    private ConcreteList _list;    private int _index;    public ConcreteIterator(ConcreteList list)    {        _list = list;        _index = 0;    }    public bool MoveNext()    {        if (_index < _list.Length)        {            return true;        }        return false;    }    public Object GetCurrent()    {        return _list.GetElement(_index);    }    public void Reset()    {        _index = 0;    }    public void Next()    {        if (_index < _list.Length)        {        _    index++;        }    }}

    客户端调用

    class Program{    static void Main(string[] args)    {        Iterator iterator;        IListCollection list = new ConcreteList();        iterator = list.GetIterator();        while (iterator.MoveNext())        {            int i = (int)iterator.GetCurrent();            Console.WriteLine(i.ToString());            iterator.Next();        }        Console.Read();    }}

    结果

    如何深入理解Java设计模式的迭代器模式

    六、NET中迭代器模式的应用

    在mscorlib程序集里有这样一个命名空间,该命名空间就是:System.Collections,在该命名空间里面早已有了迭代器模式的实现。对于聚集接口和迭代器接口已经存在了,其中IEnumerator扮演的就是迭代器的角色,它的实现如下:

    public interface IEnumerator {      object Current      {           get;      }     bool MoveNext();     void Reset(); }

    属性Current返回当前集合中的元素,Reset()方法恢复初始化指向的位置,MoveNext()方法返回值true表示迭代器成功前进到集合中的下一个元素,返回值false表示已经位于集合的末尾。能够提供元素遍历的集合对象,在.net中都实现了IEnumerator接口。

    IEnumerable则扮演的就是抽象聚集的角色,只有一个GetEnumerator()方法,如果集合对象需要具备跌代遍历的功能,就必须实现该接口。

    public interface IEnumerable{    IEumerator GetEnumerator();}

    抽象聚合角色(Aggregate)和抽象迭代器角色(Iterator)分别是IEnumerable接口和IEnumerator接口,具体聚合角色(ConcreteAggregate)有Queue类型, BitArray等类型

    迭代器模式就是抽象一个迭代器类来分离了集合对象的遍历行为,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

    看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

    --结束END--

    本文标题: 如何深入理解Java设计模式的迭代器模式

    本文链接: https://www.lsjlt.com/news/304951.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 如何深入理解Java设计模式的迭代器模式
      如何深入理解Java设计模式的迭代器模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是迭代器模式迭代器模式是针对集合对象而生的,对于集合对象而言,肯定...
      99+
      2023-06-25
    • 深入理解Java设计模式之迭代器模式
      目录一、什么是迭代器模式二、迭代器模式的结构三、迭代器模式的使用场景四、迭代器模式的优缺点优点:缺点:五、迭代器模式的实现抽象聚合类迭代器抽象类具体聚合类具体迭代器类客户端调用六、N...
      99+
      2022-11-12
    • 深入理解Java设计模式之代理模式
      目录一、引言二、什么是代理模式三、代理模式的结构四、代理模式和装饰模式的异同五、代理模式和委托六、代理模式的种类七、代理模式的应用场景八、代理模式的优缺点九、代理模式的实现总结一、引...
      99+
      2022-11-12
    • 深入理解Java设计模式之解释器模式
      目录一、什么是解释器模式二、解释器模式的使用场景三、解释器模式的优缺点优点:缺点:四、解释器模式的实现音乐解释器演奏内容类(Context) 表达式类(AbstractExpress...
      99+
      2022-11-12
    • Java设计模式之java迭代器模式详解
      目录前言介绍角色迭代器模式中的工厂模式学院遍历的案例分析解决方案基本介绍原理类图上面案例的类图案例实现代码案例总结应用实例Java集合中的迭代器模式角色说明Mybatis中的迭代器模...
      99+
      2022-11-12
    • 深入理解Go设计模式之代理模式
      代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问。代理对象充当了原始对象的代理,允许在访问原始对象之...
      99+
      2023-08-08
      Go
    • Java设计模式之迭代器模式
      本文介绍设计模式中的迭代器模式,首先通俗的解释迭代器模式的基本概念和对应的四个角色,并根据四个角色举一个典型的实例,为了加强知识的连贯性,我们以Jdk源码集合中使用迭代器模式的应用进...
      99+
      2022-11-13
    • Java设计模式中的迭代器模式详解
      目录一 定义二 UML类图三 代码实例四 迭代器模式的优缺点4.1 优点4.2 缺点五 使用场景六 JDK迭代器的运用一 定义 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露...
      99+
      2023-02-08
      Java迭代器模式 Java设计模式
    • 深入浅析java设计模式中的代理模式
      这期内容当中小编将会给大家带来有关深入浅析java设计模式中的代理模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是代理模式(Porxy)  概念:代理模式就是为其他对象提供一种代理以控制对这个...
      99+
      2023-05-31
      java ava 代理模式
    • 深入理解Java设计模式之适配器模式
      目录一、什么是适配器模式二、适配器模式的结构三、适配器模式的使用场景四、适配器模式的优缺点五、适配器模式的实现1.类适配器模式2.对象适配器模式六、适配器模式的.NET应用总结一、什...
      99+
      2022-11-12
    • 深入理解Java设计模式之状态模式
      目录一、什么是状态模式二、状态模式的结构三、状态模式的使用场景四、状态模式和策略模式对比五、状态模式的优缺点六、状态模式的实现七、总结一、什么是状态模式 定义:当一个对象的内在状态改...
      99+
      2022-11-12
    • 深入理解Java设计模式之命令模式
      目录一、什么是命令模式二、命令模式的使用场景三、命令模式的优缺点四、命令模式的实现五、总结一、什么是命令模式 命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你...
      99+
      2022-11-12
    • 深入理解Java设计模式之原型模式
      目录一、前言二、什么是原型模式三、原型模式的适用场景四、原型模式的实现1.浅拷贝实现2.深拷贝实现五、总结一、前言 单例模式可以避免重复创建消耗资源的对象,但是却不得不共用对象。若是...
      99+
      2022-11-12
    • 深入理解Java设计模式之策略模式
      目录一、什么是策略模式二、策略模式的结构三、策略模式的应用场景四、策略模式的优缺点六、策略模式的实现七、策略模式和简单工厂模式的结合八、策略枚举的实现九、总结一、什么是策略模式 策略...
      99+
      2022-11-12
    • 深入理解Java设计模式之单例模式
      目录一、什么是单例模式二、单例模式的应用场景三、单例模式的优缺点四、单例模式的实现1.饿汉式2.懒汉式3.双重加锁机制4.静态初始化五、总结一、什么是单例模式 单例模式是一种常用的软...
      99+
      2022-11-12
    • 深入理解Java设计模式之装饰模式
      目录一、前言二、什么是装饰模式1.定义:2.意图3.别名4.动机5.作用6.问题三、装饰模式的结构四、装饰模式的使用场景五、装饰模式的优缺点六、装饰模式的实现七、装饰模式的.NET应...
      99+
      2022-11-12
    • 深入理解Java设计模式之桥接模式
      目录二、桥接模式的结构三、桥接模式的使用场景四、桥接模式的优缺点五、装饰,桥接和适配器模式的异同适配器模式:桥接模式:装饰器模式:六、桥接模式的实现七、总结一、什么是桥接模式 桥接模...
      99+
      2022-11-12
    • 深入理解Java设计模式之组合模式
      目录一、什么是组合模式动机(Motivation)意图(Intent)二、组合模式的结构结构图说明:三、组合模式的使用场景四、组合模式的优缺点五、组合模式的实现六、组合模式的.NET...
      99+
      2022-11-12
    • 深入理解Java设计模式之享元模式
      目录一、引言二、什么是享元模式三、享元模式的结构四、享元模式和单例模式的异同五、享元模式的优缺点六、享元模式的使用场景七、享元模式的实现八、总结一、引言 大家都知道单例模式,通过一个...
      99+
      2022-11-12
    • 深入理解Java设计模式之外观模式
      目录一、什么是外观模式二、外观模式的使用场景三、外观模式的优缺点四、外观模式的实现总结一、什么是外观模式 定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。 ...
      99+
      2022-11-12
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作