分类: 【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. SprintBoot学习(三)

    Thymeleaf模板引擎 1.thymeleaf是一个Java类库,,他是xml/xhtml/html5的模板引擎可以作为view层 2.themeleaf基本语法 引入thymeleaf < ...

  2. 洛谷P1006传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了. ...

  3. mark mark mark

    编译并使用静态lib---->>>>转自:Walkthrough: Creating and Using a Static Library (C++) 跟踪内存分配:http: ...

  4. UI UED设计

    Element: https://element.eleme.cn/#/zh-CN/guide/design

  5. leetcode菜鸡斗智斗勇系列(7)--- 用最小的时间访问所有的节点

    1.原题: https://leetcode.com/problems/minimum-time-visiting-all-points/ On a plane there are n points ...

  6. springmvc_ajax异步上传文件(基于ajaxfileupload.js)

    引入js <script th:src="@{/js/ajaxfileupload.js}"></script> html <tr> <t ...

  7. lower_bound() 函数使用详解

    简介 lower_bound()函数是用来求一个容器中,第一个大于等于所要查找的元素的地址,具体的原理是二分查找,因此它只能用于非降序序列. 他有三个参数,第一个参数是容器的初始地址,第二个参数是容器 ...

  8. 11 JavaScript Number原始值&对象&科学记数法&范围&进制转换&溢出Infinity&NaN

    JavaScript Number对象 是经过封装的能处理数字值的对象 由Number()构造器创建 只有一种数字类型 可以使用也可以不使用小数点书写数字 JavaScript原始值与对象: 在Jav ...

  9. javascript ----一些边距知识

    Style top 属性  Style 对象 定义和用法 top 属性设置或返回定位元素的顶部位置. 该属性规定了元素的顶部位置,包括:内边距.滚动条.边框和外边距. 提示:一个定位元素是元素的 po ...

  10. 查看mysql进程

    show processlist; show full processlist;