分类: 【java】2013-07-15 10:58 917人阅读 评论(0) 收藏 举报
所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。
参考:马士兵 Java设计模式 Iterator
1.首先定义一个容器Collection接口.

  1. package com.njupt.zhb.learn.iterator;
  2. public interface Collection {
  3. void add(Object o);
  4. int size();
  5. Iterator iterator();
  6. }

2.定义一个Iterator迭代器的接口

  1. package com.njupt.zhb.learn.iterator;
  2. public interface Iterator {
  3. Object next();
  4. boolean hasNext();
  5. }

3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。

  1. package com.njupt.zhb.learn.iterator;
  2. import com.njupt.zhb.learn.iterator.Collection;
  3. public class ArrayList implements Collection {
  4. Object[] objects = new Object[10];
  5. int index = 0;
  6. public void add(Object o) {
  7. if(index == objects.length) {
  8. Object[] newObjects = new Object[objects.length * 2];
  9. System.arraycopy(objects, 0, newObjects, 0, objects.length);
  10. objects = newObjects;
  11. }
  12. objects[index] = o;
  13. index ++;
  14. }
  15. public int size() {
  16. return index;
  17. }
  18. public Iterator iterator() {
  19. return new ArrayListIterator();
  20. }
  21. private class ArrayListIterator implements Iterator {
  22. private int currentIndex = 0;
  23. @Override
  24. public boolean hasNext() {
  25. if(currentIndex >= index) return false;
  26. else return true;
  27. }
  28. @Override
  29. public Object next() {
  30. Object o = objects[currentIndex];
  31. currentIndex ++;
  32. return o;
  33. }
  34. }
  35. }

4.编写测试程序TestMain

  1. package com.njupt.zhb.learn.iterator;
  2. import com.njupt.zhb.learn.iterator.ArrayList;
  3. public class TestMain {
  4. public static void main(String[] args) {
  5. Collection c = new ArrayList();
  6. for(int i=0; i<15; i++) {
  7. c.add("string "+i);
  8. }
  9. System.out.println(c.size());
  10. Iterator it = c.iterator();
  11. while(it.hasNext()) {
  12. Object o = it.next();
  13. System.out.println(o.toString() + " ");
  14. }
  15. }
  16. }

运行结果:

  1. 15
  2. string 0
  3. string 1
  4. string 2
  5. string 3
  6. string 4
  7. string 5
  8. string 6
  9. string 7
  10. string 8
  11. string 9
  12. string 10
  13. string 11
  14. string 12
  15. string 13
  16. string 14

从以上可以看出,设计模式到处用到面向对象中的多态接口调用子类中的函数。源代码下载:
http://download.csdn.net/detail/nuptboyzhb/5755295

Java设计模式之Iterator模式的更多相关文章

  1. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  2. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  3. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  4. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  5. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

  6. 折腾Java设计模式之状态模式

    原文地址 折腾Java设计模式之状态模式 状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式.在状态模式中,我们创建表示各种状态的对象 ...

  7. 折腾Java设计模式之模板方法模式

    博客原文地址:折腾Java设计模式之模板方法模式 模板方法模式 Define the skeleton of an algorithm in an operation, deferring some ...

  8. 折腾Java设计模式之访问者模式

    博客原文地址:折腾Java设计模式之访问者模式 访问者模式 Represent an operation to be performed on the elements of an object st ...

  9. 折腾Java设计模式之命令模式

    博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...

随机推荐

  1. JS利用HTML5的Web Worker实现多线程

    需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...

  2. Vue父组件主动获取子组件的数据和方法

    Vue父组件主动获取子组件的数据和方法 https://www.jianshu.com/p/bf88fc809131

  3. 洛谷P1346 电车(需要稍加思索的最短路)

    题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能).在每个路口,都有一个开关决定 ...

  4. STM32F4/F7运算性能

    参考http://bbs.21ic.com/icview-1622796-1-1.html

  5. spring使用context:property-placeholder载不进属性问题

    环境:spring3.1.1+mybatis3.2.8+mybatis-spring1.2.3 今天整合了SpringMVC + MyBatis,发现了一个问题,在这里做个记录,各位如果遇到相同的问题 ...

  6. FastDFS文件上传和下载流程

    文件上传流程 客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息.文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名.  组名:文件上传后所在的 ...

  7. linux 镜像备份工具rsnyc

    1.本地拷贝文件nohup rsync -avzh /data/wwwroot/xhprof/* /mnt/xhprof/ &2.更改文件夹名称mv /data/wwwroot/xhprof ...

  8. SQL SERVER用户表信息

    可以使用下面这个语句查看用户表的相关信息 RowCount 记录数 FileGroup 文件组 PartitionScheme 分区结构 IsPartitioned 是否分区 SELECT tbl.n ...

  9. Web基础了解版09-Cookie-Session

    Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ...

  10. Servlet部署项目和项目起别名

    一.部署项目: ① 单机MyEclipse导航栏下方Deploy MyEclipse J2EE Project to Server... ②单机Add,选择Service,点击Ok 二.给项目起别名: ...