分类: 【java】2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。
参考:马士兵 Java设计模式 Iterator
1.首先定义一个容器Collection接口.
[java]
view plain
copy
- package com.njupt.zhb.learn.iterator;
- public interface Collection {
- void add(Object o);
- int size();
- Iterator iterator();
- }
2.定义一个Iterator迭代器的接口
[java]
view plain
copy
- package com.njupt.zhb.learn.iterator;
- public interface Iterator {
- Object next();
- boolean hasNext();
- }
3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。
[java]
view plain
copy
- 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
[java]
view plain
copy
- 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() + ” “);
- }
- }
- }
运行结果:
[html]
view plain
copy
- 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
从以上可以看出,设计模式到处用到面向对象中的
多态。
接口调用子类中的函数。源代码下载: