集合遍历[设计模式总结] 9. 迭代器模式
工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家起一学习一下集合遍历
引子
例如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;}
}
长处
- 让户客遍历你的象对,而又没法窥视你存储象对的方法
- Iterator封装“遍历集合内个每象对的程过”;——将遍历的任务放在迭代器上,而不是集合上;简化了集合的接口和实现,也让义务各得其所(单一职责准则 > 高内聚)
- 每种ConcreteAggregate集合的部内实现可能不同,但遍历法方都统起一来了,便利户客端代码。——户客端代码与集合实现类解耦。
缺陷
应用场景
尽量不要自己写迭代器模式。应用Java供提的Iterator一般就足够了。
注:上例中是数组,所以自己写了个Iterator;如果是ArrayList则直接应用.iterator()可即!
文章结束给大家分享下程序员的一些笑话语录: 那是习惯决定的,一直保持一个习惯是不好的!IE6的用户不习惯多标签,但是最终肯定还是得转到多标签的浏览器。历史(软件UI)的进步(改善)不是以个人意志(习惯)为转移的!
转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/04/21/3034392.html
集合遍历[设计模式总结] 9. 迭代器模式相关推荐
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用 ...
- Java设计模式系列之——迭代器模式
本篇我们采取倒叙的手法来讲解迭代器模式,先看下面一段我们在平时工作中常见的代码: package com.mazhichu.designpatterns.iterator;import java.ut ...
- 迭代器 java_Java设计模式8:迭代器模式
迭代器模式 迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节. 迭代器模式结构 迭代器模式由以下角色组成: 1.迭代器角色 负责定 ...
- 大话设计模式之爱你一万年:第二十章 行为模式:迭代器模式:让遍历标准化:1. 迭代器模式
如果要问java中使用最多的一种模式,答案不是单例模式,也不是工厂模式,更不是策略模式,而是迭代器模式,先来看一段代码吧: /*** 测试Iterator** @author 悟纤「公众号Spring ...
- 设计模式笔记(18)---迭代器模式(行为型)
Gof定义 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露该对象的内部表示. 动机 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可 ...
- Java设计模式 (1) —— Iterator迭代器模式
拿到这个话题,首先搞清楚:什么是迭代器? 大家都学过 for-i 循环,for-i循环的本质就是 通过i++ 或者 i-- ,以实现 从数据的一端 一个一个地遍历数据元素,直到另一端的最后一个元素,将 ...
- 设计模式:(迭代器模式)
1.定义 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为 ...
- 设计模式学习总结-迭代器模式(Iterator Pattern)
问题: 在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍 ...
- 设计模式漫谈之迭代器模式
谈恋爱是两个人的事,结婚是两个家庭的事.最近事也挺多的.我也挺烦的,有时候,我也为自己的将来担忧,我自认为自己的技术过硬,但是千里马只有遇到伯乐才能发挥作用. 技术上让我高兴的事是,有个技术问题终于突 ...
最新文章
- win10系统如何安装iis信息服务器,win10系统安装iis服务功能的具体方法【图文教程】...
- adore-ng笔记和Linux普通用户提权
- mysql_表_操作
- mplayer 所支持的音视频编解码
- ExtJs控件属性配置详细(转)
- npm如何设置淘宝镜像
- c语言编译器储存有什么用,C编译器怎么样对内存划分和使用
- VC中关于程序的托盘化
- 监控长时间运行的查询(监控数据库性能的SQL )
- 鹿晗都有 AI 粉了,为什么 AI 换脸剧的效果还这么渣?
- python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...
- 路由器启用SNMP服务
- android api文档中文版_干货分享 | Android 存储空间的最佳实践 (下)
- Matlab 中simulink 打不开高版本问题解决方法
- oracle官网(中文)
- 如何在Coldfusion中上传文件
- html word-break,HTML Style wordBreak用法及代码示例
- word表格分开快捷键_在Word 表格的编辑中,快速拆分表格应按快捷键为______。
- 【9.4】多元复合函数的求导法则
- 直播代码Flutter 实现虎牙/斗鱼 弹幕效果