Java设计模式之Iterator模式介绍

所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。需要的朋友可以参考下
 

1.首先定义一个容器Collection接口.

复制代码 代码如下:

package com.njupt.zhb.learn.iterator;
public interface Collection {
 void add(Object o);
 int size();
 Iterator iterator();
}

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

复制代码 代码如下:

package com.njupt.zhb.learn.iterator;
public interface Iterator {
 Object next();
 boolean hasNext();
}

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

复制代码 代码如下:

package com.njupt.zhb.learn.iterator;
import com.njupt.zhb.learn.iterator.Collection;
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;
  }

 }
}

4.编写测试程序TestMain

复制代码 代码如下:

package com.njupt.zhb.learn.iterator;
import com.njupt.zhb.learn.iterator.ArrayList;
public class TestMain {
 public static void main(String[] args) {
  Collection c = new ArrayList();
  for(int i=0; i<15; i++) {
   c.add("string "+i);
  }
  System.out.println(c.size());
  Iterator it = c.iterator();
  while(it.hasNext()) {
   Object o = it.next();
   System.out.println(o.toString() + " ");
  }
 }
}

运行结果:

复制代码 代码如下:

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

从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数。点击下载源代码

时间: 2024-12-08 22:21:48

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

Java设计模式之Iterator模式介绍_java

1.首先定义一个容器Collection接口. 复制代码 代码如下: package com.njupt.zhb.learn.iterator;public interface Collection { void add(Object o); int size(); Iterator iterator();} 2.定义一个Iterator迭代器的接口 复制代码 代码如下: package com.njupt.zhb.learn.iterator;public interface Iterator

java设计模式---prototype(原型)模式

设计 java设计模式---prototype(原型)模式 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.      Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,      工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求      原型对象拷贝它们自己来实施创建.      适用性:当要实例化的类是在运行时刻指定时,例如,通过动态装载:或者  为了避免创建一个与产品类层次平行的工厂类层

浅谈Java设计模式关于原型模式(Prototype)思索建议

java教程:关于Java设计模式关于原型模式(Prototype) IT信息技术http://www.52ij.com/jishu/ 首先需要弄清楚什么叫原型模式,或者说为什么要有原型模式,运用它会给我们带来什么或能解决什么问题?原型模式(Prototype)同抽象工厂模式同属于创建型模式,它主要关注于大量相同或相似对象的创建问题,应用原型模式就是先需要一个原对象,然后通过对原对象进行复制(克隆),来产生一个与原对象相同或相似的新对象.注意这里所说的对象相同不是指复制出来的副本对象与原对象是同

设计模式之iterator模式到STL中iterator迭代器

设计模式之iterator模式到STL中iterator迭代器 近日看<设计模式:可复用面向对象软件的基础>一书中23种模式中就有iterator迭代模式,且篇幅颇大.机缘巧合.我在分析STL代码结构的时候,同样发现iterator迭代器,且占据相当大的地位. 从设计模式的角度来看iterator模式 ü     意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露对象的内部表示.我想GOF 的意图这次说的很明白了,就是我想遍历一个聚合对象.但又隐藏内部实现.该怎么办呢?本模式主要

Java设计模式之迭代模式(Iterator模式)介绍_java

上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:"误人子弟,乃是犯罪!"啊. 好了,那么我们现在来看老师这个点名过程是如何实现吧:1.老规矩,我们先定义老师(Teacher)接口类: 复制代码 代码如下: public interface Teacher {     public Iterator createIterator(); //点名 }

Java设计模式之组合模式(Composite模式)介绍_java

Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Composite就应该想到树形结构图.组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行.可以用牵一动百来形容. 所以Composite模式使用到Iterator模式,和Chain of Responsi

Java设计模式之访问模式(Visitor者模式)介绍_java

Visitor定义:作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为. 为何使用Visitor模式Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了.那么我们势必要用If来判断,如: 复

Java设计模式之Visitor模式

Visitor定义 作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作的行为. 为何使用Visitor? Java的Collection(包括Vector和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了.那么我们势必要用If来判断,如: I

深入浅出Java设计模式之迭代器模式

一.引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator(); while(it.hasNext()){ //using "it.next();"do some businesss logic } 而这就是关于迭代器模式应用很好的例子. 二.定义与结构 迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个