设计模式之迭代器模式java实现代码
迭代器模式:提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
迭代器模式提供了一种方法,可以顺序访问一个聚合对象中的元素,而又不用知道内部是如何标示的。另外,迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象,让聚合更专注于数据集合。
案例实现情景:我和友人去超市分头购物,在结帐时,我们遍历一下我们的 “扫货” 清单(遍历打印购物清单),在实现上,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实现代码相关推荐
- 【GOF23设计模式】迭代器模式
[GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...
- [转载] Python进阶:设计模式之迭代器模式
参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...
- C++设计模式(20)——迭代器模式
亦称: Iterator 意图 迭代器模式是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表. 栈和树等) 的情况下遍历集合中所有的元素. 问题 集合是编程中最常使用的数据类型之一. 尽管如 ...
- 每日学一个设计模式1——迭代器模式
引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...
- php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】
本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...
- 设计模式--责任链模式--Java实现
设计模式–责任链模式–Java实现 责任链模式–链式数据结构–内存消耗–Java的awt事件一开始用责任链模式后来改为观察者模式–为什么呢?–现在的应用–dom事件–异常处理机制-过滤器链–等等 学习 ...
- Java 设计模式之迭代器模式
一.了解迭代器模式 1.1 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和 ...
- 【Java设计模式】迭代器模式
迭代器模式 1.概述 定义: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 2.结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储.添加.删 ...
- 设计模式——迭代器模式(附代码示例)
一. 传统方式 以学校院系展示为例,实现在一个页面展示学校的院系组成,一个学校有多个学院,一个学院有多个系.传统方式实现类图如下: 传统方式将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织 ...
最新文章
- 语言解决猜神童年龄的问题_一个程序设计题目猜年龄(不限程序语言)
- js简单的条件语句判断
- SqlServer还原数据库时提示:异常终止,不能在此版本的SQL Server中启动,因为它包含分区函数
- 微信公众平台:反正公众号的一切操作都从这里入手!
- PHP5各个版本的新功能和新特性总结(转载 http://www.jb51.net/article/48150.htm)
- 实战:采⽤Sharding-JDBC实现订单表的(两主四从) 分库分表 和 读写分离
- 管理和维护RHCS集群
- jQuery学习之四---Ajax请求
- 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一
- matlab无穷积分求解_python做微积分
- 微信支付 SDK 惊爆漏洞:黑客可 0 元购买任意商品
- 重写系统黑色的TabBar
- Eclipse自动生成返回值对象
- 开盘前1.5秒下单可追涨停股
- 2022G3锅炉水处理上岗证题库及答案
- dev-c++文件名取名问题(踩坑)
- 使用MediaPlayer的一些常见报错及解决方法-1
- 几种常用的文件加密方法
- RecyclerView详解一,使用及缓存机制
- 艺赛旗(RPA)Python 读写 ini 配置文件
热门文章
- 深入了解EJB (一) EJB在java世界的地位
- 解决wamp、vertrigo等集成环境安装后apache不能启动的问题
- 北京点击科技有限公司董事长兼总裁——王志东经典语录4
- 第一次使用VS Code时你应该知道的一切配置
- 设计模式 — 行为型模式 — 迭代器模式
- Python基本语法_强制数据类型转换
- 一周小程序学习 第1天
- 开源 java CMS - FreeCMS2.8 栏目页静态化参数
- 分布式缓存的面试题8
- 《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.47. Gawk-4.1.1...