迭代器模式:提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

迭代器模式提供了一种方法,可以顺序访问一个聚合对象中的元素,而又不用知道内部是如何标示的。另外,迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象,让聚合更专注于数据集合。

案例实现情景:我和友人去超市分头购物,在结帐时,我们遍历一下我们的 “扫货” 清单(遍历打印购物清单),在实现上,Me使用ArrayList,友人使用Thing[]数组,给遍历造成困扰。

案例代码:

Thing.java

public class Thing {private String name;private long price;public Thing(String name,long price){this.name = name;this.price = price;}@Overridepublic String toString() {return "Thing [name=" + name + ", price=" + price + "]";}}

Me.java

import java.util.ArrayList;
import java.util.Iterator;public class Me {private ArrayList<Thing> shopping = new ArrayList<Thing>();public Me(){shopping.add(new Thing("巧克力", 35));shopping.add(new Thing("凉茶", 4));shopping.add(new Thing("袜子", 9));shopping.add(new Thing("香蕉", 12));}public Iterator<Thing> createIterator(){return shopping.iterator();}
}

Friends.java

import java.util.Iterator;public class Friends {private Thing[] shopping = new Thing[100];public Friends(){shopping[0] = new Thing("牛奶",15);shopping[1] = new Thing("苹果",10);shopping[2] = new Thing("薯片",4);}public Iterator<Thing> createIterator(){return new ArrayIterator(shopping);}
}

ArrayIterator.java

import java.util.Iterator;public class ArrayIterator implements Iterator<Thing>{private Thing[] thingArray;private int position = 0;public ArrayIterator(Thing[] array){thingArray = array;}@Overridepublic boolean hasNext() {while(position<thingArray.length && thingArray[position] != null){return true;}return false;}@Overridepublic Thing next() {return thingArray[position++];}@Overridepublic void remove() {//noting to do }}

Test.java

import java.security.AllPermission;
import java.util.ArrayList;
import java.util.Iterator;public class Test {public static void main(String args[]){ArrayList<Iterator<Thing>> allIterator = new ArrayList<Iterator<Thing>>();Me me = new Me();Friends friends = new Friends();Iterator<Thing> meIterator = me.createIterator();Iterator<Thing> friendsIterator = friends.createIterator();allIterator.add(meIterator);allIterator.add(friendsIterator);for(Iterator<Thing> iterator:allIterator){while(iterator.hasNext()){System.out.println(iterator.next());}System.out.println("---------------------");}}
}

测试结果:

Thing [name=巧克力, price=35]
Thing [name=凉茶, price=4]
Thing [name=袜子, price=9]
Thing [name=香蕉, price=12]
---------------------
Thing [name=牛奶, price=15]
Thing [name=苹果, price=10]
Thing [name=薯片, price=4]
---------------------

总结:

设计原则:

单一职责:一个类应该只有一个引起变化的职责。

当一个模块或一个类被设计成只支持一组相关的功能时,我们说它具有高内聚。

设计模式之迭代器模式java实现代码相关推荐

  1. 【GOF23设计模式】迭代器模式

    [GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...

  2. [转载] Python进阶:设计模式之迭代器模式

    参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...

  3. C++设计模式(20)——迭代器模式

    亦称: Iterator 意图 迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表. 栈和树等) 的情况下遍历集合中所有的元素. 问题 集合是编程中最常使用的数据类型之一. 尽管如 ...

  4. 每日学一个设计模式1——迭代器模式

    引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...

  5. php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】

    本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...

  6. 设计模式--责任链模式--Java实现

    设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...

  7. Java 设计模式之迭代器模式

    一.了解迭代器模式 1.1 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和 ...

  8. 【Java设计模式】迭代器模式

    迭代器模式 1.概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 2.结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储.添加.删 ...

  9. 设计模式——迭代器模式(附代码示例)

    一. 传统方式 以学校院系展示为例,实现在一个页面展示学校的院系组成,一个学校有多个学院,一个学院有多个系.传统方式实现类图如下: 传统方式将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织 ...

最新文章

  1. 语言解决猜神童年龄的问题_一个程序设计题目猜年龄(不限程序语言)
  2. js简单的条件语句判断
  3. SqlServer还原数据库时提示:异常终止,不能在此版本的SQL Server中启动,因为它包含分区函数
  4. 微信公众平台:反正公众号的一切操作都从这里入手!
  5. PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)
  6. 实战:采⽤Sharding-JDBC实现订单表的(两主四从) 分库分表 和 读写分离
  7. 管理和维护RHCS集群
  8. jQuery学习之四---Ajax请求
  9. 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一
  10. matlab无穷积分求解_python做微积分
  11. 微信支付 SDK 惊爆漏洞:黑客可 0 元购买任意商品
  12. 重写系统黑色的TabBar
  13. Eclipse自动生成返回值对象
  14. 开盘前1.5秒下单可追涨停股
  15. 2022G3锅炉水处理上岗证题库及答案
  16. dev-c++文件名取名问题(踩坑)
  17. 使用MediaPlayer的一些常见报错及解决方法-1
  18. 几种常用的文件加密方法
  19. RecyclerView详解一,使用及缓存机制
  20. 艺赛旗(RPA)Python 读写 ini 配置文件

热门文章

  1. 深入了解EJB (一) EJB在java世界的地位
  2. 解决wamp、vertrigo等集成环境安装后apache不能启动的问题
  3. 北京点击科技有限公司董事长兼总裁——王志东经典语录4
  4. 第一次使用VS Code时你应该知道的一切配置
  5. 设计模式 — 行为型模式 — 迭代器模式
  6. Python基本语法_强制数据类型转换
  7. 一周小程序学习 第1天
  8. 开源 java CMS - FreeCMS2.8 栏目页静态化参数
  9. 分布式缓存的面试题8
  10. 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.47. Gawk-4.1.1...