Java设计模式之Iterator模式

分类: 【java】2013-07-15 10:58 917人阅读 评论(0) 收藏 举报

所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。
参考:马士兵 Java设计模式 Iterator
1.首先定义一个容器Collection接口.

[java] view plaincopy

  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迭代器的接口

[java] view plaincopy

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

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

[java] view plaincopy

  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

[java] view plaincopy

  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. }

运行结果:

[html] view plaincopy

  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

时间: 2024-11-04 19:02:44

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

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

JAVA设计模式之代理模式

学编程吧JAVA设计模式之代理模式发布了,欢迎通过xuebiancheng8.com来访问 一.概述 给某一个对象提供一个代理,并由代理对象来完成对原对象的访问.代理模式是一种对象结构型模式. 二.适用场景 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口. 三.UML类图 四.参与者 1.接口类:Subject 它声明了真实访问者和代理访问者的共同接口,客户端通常需要针对接口角色进行编程. 2.代理类

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

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式

浅析JAVA设计模式之工厂模式(二)

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

JAVA设计模式(3)----代理模式

1.  什么是代理模式?Proxy Pattern 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通俗的讲,代理模式就是我很忙没空理你,你要想找我可以先找我的代理人,代理人和被代理人继承同一个接口.代理人虽然不能干活,但是被代理的人可以干活. 这个例子中有水浒传中的这么几个人:名垂青史的潘金莲,王婆,西门大官人.西门庆想要找潘金莲,需要找王婆做代理.首先定义一个接口:Kin

java设计模式------装饰着模式

java设计模式-------装饰者模式 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案.主要有组件(components)和装饰器(Decorator)组成.要求components和Decorator实现相同的接口或者抽象类(具体类的局限性太大). 设计原则.模式特点.适用性 - 1. 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用

浅析JAVA设计模式之工厂模式(三)

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式. 1抽象工厂模式简介 抽象工厂 (Abstract Factroy) 模式:工具箱模式(kit).抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图. 图1.1 上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产.又例如下图: 图1.2 上图表示的是Button和Text两个不同产品的等级

JAVA设计模式之 状态模式【State Pattern】

一.概述 当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式.状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化.状态模式是一种对象行为型模式. 二.适用场景 用于解决系统中复杂对象的多种状态转换以及不同状态下行为的封装问题.简单说就是处理对象的多种状态及其相互转换. 三.UML类图 四.参与者 1>.AbstractState(抽象状态类): 在抽象状态类中定义申明了不同状态下的行为抽象方法,而由子类

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

JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式. 结构 图-装饰者模式结构图 Component : 定义一个对象接口,可以给这些对象动态地添加职责. interface Component {     public void operation(); } ConcreteComponent : 实现 Component 定义的接口. clas