上周六就開始写这篇博客,之后一直耽误了。到前天才開始写。今天醒的早,就把这部分整理一下。

本文内容參考易学设计模式和马士兵的迭代器模式的视频。

了解迭代器模式一个作用就是让你在使用 迭代器遍历集合类的时候 认为更自然。'

一 、迭代器模式简单介绍

【定义】 跌倒器模式提供一种顺序訪问一个聚合对象中各个元素,而又不暴露该对象的内部表示的方法。

【原理】 主要4部分组成:迭代器角色、详细迭代器角色、容器角色和详细容器角色。

【使用时机】当訪问一个聚合对象的内容而无需暴露它的内部表示,或者须要支持对集合对象的多种遍历。或者为

遍历不同的聚合结构提供一个统一的接口时,就能够考虑是用迭代器模式。

二 、实现ArrayList和linkedList的迭代器

这里仅仅是简单实现,详细的能够看看源代码。记得csdn中有一个 兰亭风雨 的博客写有集合类源代码解析的文章。

上代码:

Iterator.java

package com.chan;

public interface Iterator {

	Object next();
boolean hasNext();
}

Collection.java

package com.chan;

public interface Collection {

	void add(Object obj);
int size();
Iterator iterator();
}

Node,java

package com.chan;

public class Node {

	private Object data;
private Node next; public Node(Object data, Node next) {
super();
this.data = data;
this.next = next;
} public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
} }

ArrayList.java

package com.chan;
public class ArrayList implements Collection { Object[] objects = new Object[10];
int index = 0;
public void add(Object o) {
if(index == objects.length) {
Object[] newObjects = new Object[objects.length * 2];
System.arraycopy(objects, 0, newObjects, 0, objects.length);
objects = newObjects;
}
objects[index] = o;
index ++;
} public int size() {
return index;
} public Iterator iterator() { return new ArrayListIterator();
} private class ArrayListIterator implements Iterator {
private int currentIndex = 0; @Override
public boolean hasNext() {
if(currentIndex >= index) return false;
else return true;
} @Override
public Object next() {
Object o = objects[currentIndex];
currentIndex ++;
return o;
} }
}

LinkedList.java

package com.chan;

public class LinkedList implements Collection {
Node head = null;
Node tail = null;
int size = 0;
public void add(Object o) {
Node n = new Node(o, null);
if(head == null) {
head = n;
tail = n;
}
tail.setNext(n);
tail = n;
size ++;
} public int size() {
return size;
} @Override
public Iterator iterator() {
return new LinkedListIterator();
} private class LinkedListIterator implements Iterator{ private Node currentNode = head;
private int nextIndex = 0;//參考源代码中的写法 @Override
public Object next() { Object data = currentNode.getData();
currentNode = currentNode.getNext();
nextIndex ++;
return data;
} @Override
public boolean hasNext() { return nextIndex != size;
} } }

Test>java

package com.chan;
public class Test { public static void main(String[] args) { //Collection c = new ArrayList();
Collection c = new LinkedList(); for(int i=0; i<15; i++){
c.add("test-"+i);
} System.out.println(c.size()); Iterator it = c.iterator();
while(it.hasNext()) {
Object o = it.next();
System.out.print(o + " ");
}
}
//15
//test-0 test-1 test-2 test-3 test-4 test-5 test-6 test-7 test-8 test-9 test-10 test-11 test-12 test-13 test-14
}

以上代码測试通过。

设计模式(8) - 迭代器模式(iterator)- 实现ArrayList和linkedList的迭代器的更多相关文章

  1. 迭代器模式 Iterator 行为型 设计模式(二十)

    迭代器模式(Iterator)   走遍天下,世界那么大,我想去看看   在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义 如果给定一个数组,我们可以通过for循 ...

  2. 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

    设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...

  3. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  4. 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

      设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...

  5. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  6. 设计模式 -- 迭代器模式(Iterator)

    --------------------------------------------------------------------- 1.场景问题 考虑这样一个问题: 9个学生对象分别通过数组存 ...

  7. Java 设计模式系列(十五)迭代器模式(Iterator)

    Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...

  8. 设计模式 - 迭代器模式(iterator pattern) 具体解释

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  9. 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素

    模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...

随机推荐

  1. C 程序实现密码隐秘输入 linux系统可执行

    读写用户输入,屏幕不回显 char *getpass( const char *prompt); getpass用于从键盘读取用户输入,但屏幕不回显. 参数prompt为屏幕提示字符. 函数返回值为用 ...

  2. 和为S的两个数

    题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思考 注 ...

  3. Oracle 11g服务器安装详细步骤——图文教程

    1.大家可以根据自己的操作系统是多少位(32位或64位)的,到官网下载相应的安装程序,如下图所示. 有一点需要注意,Oracle的安装程序分成2个文件,下载后将2个文件解压到同一目录即可. 2.下载完 ...

  4. .Net Core2.0秒杀CMS部署到Centos7.3遇到的坑,酸爽呀

    一.Centos7.3的安装 打开VirtualBox,点击新建,如下图所示: 点击“下一步”,弹出下面的对话框,调整内存大小,建议设置为2G,这样操作更流畅点 设置好,点击“OK”,再点击“启动”, ...

  5. seajs笔记

    Amd和Cmd的区别有哪些? 1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行.不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同).CMD 推崇 ...

  6. SmartAdmin(SmartAdmin_v1.5.2)

    SmartAdmin_v1.5.2是一个基于bootstrap上开发的页面设置,前后台数据交互和样式显示. 用过的例子有F:\SmartAdmin_v1.5.2\SmartAdmin_v1.5.2\D ...

  7. 搭建ntp时间服务器 ntp - (Network Time Protocol)

    第1章 ntp 1.1 ntp简介        NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调 ...

  8. 结合程序崩溃后的core文件分析bug

    引言     在<I/O的效率比较>中,我们在修改图1程序的BUF_SIZE为8388608时,运行程序出现崩溃,如下图1:          图1. 段错误     一般而言,导致程序段 ...

  9. Python之多进程篇

    Process 创建子进程执行指定的函数 >>> from multiprocessing import Process,current_process >>> & ...

  10. Python中__new__和__init__区别

    __new__:创建对象时调用,会返回当前对象的一个实例 __init__:创建完对象后调用,对当前对象的一些实例初始化,无返回值 1.在类中,如果__new__和__init__同时存在,会优先调用 ...