Java 实现迭代器(Iterator)模式
类图
/**
* 自己定义集合接口, 相似java.util.Collection
* 用于数据存储
* @author stone
*
*/
public interface ICollection<T> { IIterator<T> iterator(); //返回迭代器
void add(T t);
T get(int index);
}
/**
* 自己定义迭代器接口 相似于java.util.Iterator
* 用于遍历集合类ICollection的数据
* @author stone
*
*/
public interface IIterator<T> {
boolean hasNext();
boolean hasPrevious();
T next();
T previous();
}
/**
* 集合类, 依赖于MyIterator
* @author stone
*/
public class MyCollection<T> implements ICollection<T> { private T[] arys;
private int index = -1;
private int capacity = 5; public MyCollection() {
this.arys = (T[]) new Object[capacity];
} @Override
public IIterator<T> iterator() {
return new MyIterator<T>(this);
} @Override
public void add(T t) {
index++;
if (index == capacity) {
capacity *= 2;
this.arys = Arrays.copyOf(arys, capacity); }
this.arys[index] = t;
} @Override
public T get(int index) {
return this.arys[index];
} }
/*
* 迭代器(Iterator)模式 又叫做游标(Cursor)模式
* 提供一种方法訪问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
* Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既能够做到不暴露集合的内部结构,又可让外部代码透明的訪问集合内部的数据
*
* 若有新的存储结构,可new 一个ICollection, 相应的 new 一个IIterator来实现它的遍历
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class Test {
public static void main(String[] args) {
ICollection<Integer> collection = new MyCollection<Integer>();
add(collection, 3, 5, 8, 12, 3, 3, 5);
for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
} System.out.println("-------------"); ICollection collection2 = new MyCollection();
add(collection2, "a", "b", "c", 3, 8, 12, 3, 5);
for (IIterator iterator = collection2.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
} } static <T> void add(ICollection<T> c, T ...a) {
for (T i : a) {
c.add(i);
}
}
}
打印
3
5
8
12
3
3
5
-------------
a
b
c
3
8
12
3
5
Java 实现迭代器(Iterator)模式的更多相关文章
- 设计模式—迭代器Iterator模式
什么是迭代器模式? 让用户通过特定的接口访问容器的数据,不需要了解容器内部的数据结构. 首先我们先模仿集合中ArrayList和LinkedList的实现.一个是基于数组的实现.一个是基于链表的实现, ...
- Java设计模式之Iterator模式
分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...
- 1、迭代器 Iterator模式 一个一个遍历 行为型设计模式
1.Iterator模式 迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或者阵列)上遍访的接口,设计人员无需关心容器的内容. I ...
- Java集合迭代器 Iterator分析
简介 迭代器是遍历容器的一种常用方法,它屏蔽了容器的实现细节,无需暴露数据结构内部,就可以对容器进行遍历,迭代器本身也是一种设计模式,迭代是一种特殊的遍历方式. Iterator 在java中,迭代器 ...
- 设计模式C++描述----20.迭代器(Iterator)模式
一. 举例说明 我们知道,在 STL 里提供 Iterator 来遍历 Vector 或者 List 数据结构. Iterator 模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个 ...
- 设计模式——迭代器(Iterator)模式
概述 迭代器模式简单的说(按我目前的理解)就是一个类提供一个对外迭代的接口,方面调用者迭代.这个迭代接口至少包括两个方法:hasNext()--用于判断是否还有下一个,next()--用于取出下一个对 ...
- Head First 设计模式 —— 10. 迭代器 (Iterator) 模式
思考题 public void printMenu() { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList ...
- Java中迭代器Iterator的使用
Java集合类中Map接口下的相关类并没有像Collection接口的相关类一样实现get()方法,因此在要实现遍历输出的场景中没法直接用get()方法来取得对象中的数据,但Java本身提供了另一种遍 ...
- java集合---迭代器iterator
一:ArraryList 最终继承超级接口Collection,Colection接口继承Iterator接口. public interface Collection<E> exten ...
随机推荐
- Java并发编程之ConcurrentHashMap(转)
ConcurrentHashMap ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法.Concurrent ...
- C++ tree(1)
建立与基本操作 .有关二叉树的相关概念,这里不再赘述,假设不了解二叉树相关概念,建议先学习数据结构中的二叉树的知识点 准备数据 定义二叉树结构操作中须要用到的变量及数据等. #define MAXLE ...
- 操作系统学习笔记_12_I/O管理 --I/O管理概述
h1 { margin-bottom: 0.21cm; }h1.western { font-family: "Liberation Sans",sans-serif; font- ...
- Android采用canvas绘制各种图形
canvas通俗的说就是一个帆布,我们可以用刷子paint,就此随机抽签显卡. 原理: 能够canvas视Surface替代或接口.图形绘制Surface向上.Canvas封装了全部的绘制调用. 通过 ...
- Android开发系列(十九个):至SimpleAdapter设置样式
Adapter任务:在数据adapter处理后做.展会上的观点 对于一般ArrayAdapter供.传递给ArrayAdapter之后就能够在视图上用一个列表显示出这个字符串数组. 比例如以下边的代码 ...
- eclipse环境下如何配置tomcat
eclipse环境下如何配置tomcat 很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置tomcat时,总会有种难下手的感觉,在此,通过图文解说的方法,最直观的向大家演示一遍该配置过 ...
- The maximum string content length quota (8192) has been exceeded while reading XML data
原文:The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们W ...
- js之面向对象----封装篇
学习了一天的面向对象总结一下,共分为三类 - -! 老规矩 第一部分是概念性知识!!! 面向对象编程,我们可以把他想象成我们在造人.一个对象便是一个人,这个人有胳膊有腿,这便是一个对象的属性或者方法. ...
- Android-支付宝快捷支付
支付宝的快捷支付Android版业务流程比較麻烦,出现的意外情况比較多.在此,简单说下开发流程以及出现错误的解决方式; 1.注冊支付业务.这里不在赘述.建立数据安全传输所须要的私钥公钥,这里採用的是R ...
- HDU1253 胜利大逃亡 BFS
胜利大逃亡 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submiss ...