大战设计模式【12】—— 迭代器模式
迭代器模式(Iterator)
设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample
一、定义
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
二、结构
Iterator(抽象迭代器):定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法。
ConcreteIterator(具体迭代器):它实现了抽象迭代器接口,完成对聚合对象的遍历。
Aggregate(抽象聚合类):用于存储和管理元素对象,声明一个CreateIterator()方法用于创建一个迭代器对象,充当抽象迭代器工厂角色。
ConcreteAggregate(具体聚合类):实现了在抽象聚合类中声明的CreateIterator()方法,返回一个对应的具体迭代器ConcreteIterator实例。
三、优点
支持以不同方式遍历一个聚合对象,在同一个聚合对象上可以定义多种便利方式。
增加新的聚合类和迭代器类都很方便,无须修改原有代码,符合开闭原则。
四、缺点
增加新的聚合类需要对应增加新的迭代器类
五、应用场景
访问一个聚合对象的内容而无须暴露它的内部表示。
需要为一个聚合对象提供多种遍历方式。
六、个人总结
1、如果你已经了解java中的迭代器,那么迭代器设计模式应该很容易理解,简单的说,java利用这样的设计模式设计出了它的迭代器
对于我们熟知的那些集合都可以使用迭代器去遍历
2、例子中我们自己创建了迭代器的接口,这是我们学习所需要了解内部机制所用的
在实际中我们通常使用java.util.Iterator
参考博客:http://www.cnblogs.com/edisonchou/p/7442138.html
转载于:https://www.cnblogs.com/linkstar/p/7747226.html
大战设计模式【12】—— 迭代器模式相关推荐
- 【GOF23设计模式】迭代器模式
[GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...
- [转载] Python进阶:设计模式之迭代器模式
参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...
- 每日学一个设计模式1——迭代器模式
引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...
- php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】
本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...
- 设计模式之迭代器模式(Iterator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式之迭代器模式java实现代码
迭代器模式:提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式提供了一种方法,可以顺序访问一个聚合对象中的元素,而又不用知道内部是如何标示的.另外,迭代器模式把在元素之 ...
- 设计模式复习-迭代器模式
Iterator.H #pragma once #include <list> #include <windows.h> using namespace std;/* 设计模式 ...
- php foreach 循环 判断index 小于多少_PHP设计模式之迭代器模式 - 硬核项目经理
一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...
- Java 设计模式之迭代器模式
一.了解迭代器模式 1.1 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和 ...
- 设计模式:迭代器模式(Iterator)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
最新文章
- mysql怎么创建表视频教程_mySQL学习入门教程——2.创建表
- ElasticSearch 2 (7) - 基本概念
- 介绍 Java 的内存泄漏
- 使用STL去除std::vector自定义结构体重复项
- 解决React Native使用Fetch API请求网络报Network request failed
- redis介绍和安装
- 使用python语解决一个小学数学题----鸡兔同笼问题
- no valid sudoers sources found, quitting ubuntu 16.04 devstack
- 群晖Docker部署MySQL服务
- C语言每日一练——第28天:要求输出国际象棋棋盘
- 二元灰狼优化(BGWO)应用于特征选择任务(Matlab代码实现)
- CISCO路由器基础配置及配置静态路由
- uefi多linux系统启动盘,【XORBOOT Uefi(多系统启动工具)和好用U盘启动盘制作工具哪个好用】XORBOOT Uefi(多系统启动工具)和好用U盘启动盘制作工具对比-ZOL下载...
- 嵌入式薪资真实情况,这届毕业生都拿多少钱?!
- cultureinfo 类 java_使用CultureInfo和RegionInfo类进行全球化和本地化
- 研究生阶段该怎么学习
- 一天让你成为PPT达人
- mysql中的scn_关于SCN的理解(全面)
- python+vue高校图书借阅管理系统
- C#使用NPOI将txt文本批量转为excel文件
热门文章
- python脚本加密_教你如何基于python实现脚本加密
- LeetCode 668. 乘法表中第k小的数(二分查找)
- LeetCode MySQL 569. 员工薪水中位数(over窗口函数)
- 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
- 程序员面试金典 - 面试题 16.05. 阶乘尾数(5的因子)
- 程序员面试金典 - 面试题 01.09. 字符串轮转
- LeetCode 606. 根据二叉树创建字符串(递归)
- python哪本书好看_python入门看哪本书好
- python实现解释器_Python设计模式之解释器模式
- svg载入html,SVG系列教程:SVG简介与嵌入HTML页面的方式