Java设计模式之Iterator模式介绍
发布时间:2020-12-14 05:20:43 所属栏目:Java 来源:网络整理
导读:1.首先定义一个容器Collection接口. 复制代码 代码如下: package com.njupt.zhb.learn.iterator; public interface Collection { void add(Object o); int size(); Iterator iterator(); } 2.定义一个Iterator迭代器的接口 复制代码 代码如下: package com.n
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,newObjects,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 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数。点击下载源代码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |