工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家起一学习一下集合遍历

引子

例如Waitress类要遍历打印两种菜单,一种是基于ArrayList,一种是基于数组;

则Waitress要需对他们分别用两个不同的逻辑来遍历。

义定

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

迭代器模式供提了一种法方次序拜访一个聚合象对中的各个素元,而又不暴露该象对的部内表现。

类图

Iterator:抽象迭代器

这是有所迭代器都必须实现的接口,利用该接口法方可以在集合素元之间游走。可用java.util.Iterator

ConcreteIterator:详细迭代器

详细迭代器责负理管前目遍历的置位、成完集合素元的遍历。

public class DinerMenuIterator implements Iterator {MenuItem[] list;int position = 0; //记载前当遍历置位public DinerMenuIterator(MenuItem[] list){this.list = list}public Object next(){MenuItem menuItem = list[position];position = position + 1;return menuItem;  }public boolean hasNext(){if (position >= list.length || list[position] == null){return false;} else {return true;}}
}

Aggregate:抽象聚合(集合)

每日一道理
人生是洁白的画纸,我们个每人就是手握各色笔的画师;人生也是一条看不到尽头的长路,我们个每人则是人生道路的远足者;人生还像是一块神奇的土地,我们个每人则是手握农具的耕耘者;但人生更像一本难懂的书,我们个每人则是孜孜不倦的读书郎。

是对详细集合类的抽象,便利户客端代码,将户客端代码从详细集合象对中解耦。——让户客端:针对接口程编,而不针对实现程编

ConcreteAggregate:详细聚合(集合)

实现createIterator(),返回一个ConcreteIterator象对;该迭代器象对够能遍历象对集合。

public class DinerMenu {MenuItem[] menuItems;//返回迭代器接口public Iterator createIterator {return new DinerMenuIterator( menuItems );}//这个法方不再要需,因为会暴露部内实现!!public MenuItem[] getMenuItem(){return menuItems;}
}

长处

  1. 让户客遍历你的象对,而又没法窥视你存储象对的方法
  2. Iterator封装“遍历集合内个每象对的程过”;——将遍历的任务放在迭代器上,而不是集合上;简化了集合的接口和实现,也让义务各得其所(单一职责准则 > 高内聚)
  3. 每种ConcreteAggregate集合的部内实现可能不同,但遍历法方都统起一来了,便利户客端代码。——户客端代码与集合实现类解耦。

缺陷

应用场景

尽量不要自己写迭代器模式。应用Java供提的Iterator一般就足够了。

注:上例中是数组,所以自己写了个Iterator;如果是ArrayList则直接应用.iterator()可即!

文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/21/3034392.html

集合遍历[设计模式总结] 9. 迭代器模式相关推荐

  1. 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

    设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用 ...

  2. Java设计模式系列之——迭代器模式

    本篇我们采取倒叙的手法来讲解迭代器模式,先看下面一段我们在平时工作中常见的代码: package com.mazhichu.designpatterns.iterator;import java.ut ...

  3. 迭代器 java_Java设计模式8:迭代器模式

    迭代器模式 迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节. 迭代器模式结构 迭代器模式由以下角色组成: 1.迭代器角色 负责定 ...

  4. 大话设计模式之爱你一万年:第二十章 行为模式:迭代器模式:让遍历标准化:1. 迭代器模式

    如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: /*** 测试Iterator** @author 悟纤「公众号Spring ...

  5. 设计模式笔记(18)---迭代器模式(行为型)

    Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示. 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可 ...

  6. Java设计模式 (1) —— Iterator迭代器模式

    拿到这个话题,首先搞清楚:什么是迭代器? 大家都学过 for-i 循环,for-i循环的本质就是 通过i++ 或者 i-- ,以实现 从数据的一端 一个一个地遍历数据元素,直到另一端的最后一个元素,将 ...

  7. 设计模式:(迭代器模式)

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

  8. 设计模式学习总结-迭代器模式(Iterator Pattern)

    问题: 在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍 ...

  9. 设计模式漫谈之迭代器模式

    谈恋爱是两个人的事,结婚是两个家庭的事.最近事也挺多的.我也挺烦的,有时候,我也为自己的将来担忧,我自认为自己的技术过硬,但是千里马只有遇到伯乐才能发挥作用. 技术上让我高兴的事是,有个技术问题终于突 ...

最新文章

  1. win10系统如何安装iis信息服务器,win10系统安装iis服务功能的具体方法【图文教程】...
  2. adore-ng笔记和Linux普通用户提权
  3. mysql_表_操作
  4. mplayer 所支持的音视频编解码
  5. ExtJs控件属性配置详细(转)
  6. npm如何设置淘宝镜像
  7. c语言编译器储存有什么用,C编译器怎么样对内存划分和使用
  8. VC中关于程序的托盘化
  9. 监控长时间运行的查询(监控数据库性能的SQL )
  10. 鹿晗都有 AI 粉了,为什么 AI 换脸剧的效果还这么渣?
  11. python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...
  12. 路由器启用SNMP服务
  13. android api文档中文版_干货分享 | Android 存储空间的最佳实践 (下)
  14. Matlab 中simulink 打不开高版本问题解决方法
  15. oracle官网(中文)
  16. 如何在Coldfusion中上传文件
  17. html word-break,HTML Style wordBreak用法及代码示例
  18. word表格分开快捷键_在Word 表格的编辑中,快速拆分表格应按快捷键为______。
  19. 【9.4】多元复合函数的求导法则
  20. 直播代码Flutter 实现虎牙/斗鱼 弹幕效果

热门文章

  1. 更改git远程分支的方法
  2. php无刷新实现页面更新,使用laravel和ajax实现整个页面无刷新的操作方法
  3. python 消息队列如何接收处理_python使用消息队列RabbitMq(进阶)
  4. MQTT连接阿里云IoT(四)
  5. 段式存储管理 Vs 页式存储管理 Vs 段页式存储管理
  6. 详解JVM内存结构(基于JDK8)
  7. 常用的数据交换格式有哪些_大数据架构之数据交换平台
  8. 用python画哆啦a梦的代码解释_python画哆啦A梦和大雄
  9. Cpp 对象模型探索 / 类静态成员函数的调用方式
  10. sizeof 宏实现的方法