设计模式之迭代器模式

来源:互联网 发布:2016淘宝活动报名大全 编辑:程序博客网 时间:2024/06/05 15:50

概述:提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示

角色:

  • Iterator 迭代器定义访问和遍历元素的接口
  • ConcreteIterator 具体迭代器实现迭代器接口。 对该聚合遍历时跟踪当前位置
  • Aggregate 聚合定义创建相应迭代器对象的接口
  • ConcreteAggregate 具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例

类图:
这里写图片描述

实现:
定义自己的数组接口

interface List {      public void add(Object obj);      public Object get(int index);      public Iterator iterator();      public int getSize();}

数组具体实现

public class ConcreteAggregate implements List{       private Object[] list;       private int size=0;       private int index=0;       public ConcreteAggregate(){           index=0;           size=0;           list=new Object[100];       }    public void add(Object obj) {           list[index] = obj;           index++;           size++;    }    public Object get(int index) {        return list[index];    }    public Iterator iterator() {        return new ConcreateIterator(this);    }    public int getSize() {        return size;    }}

遍历接口:

interface Iterator {    public boolean hashNext();    public Object next();}

遍历具体实现:

public class ConcreateIterator implements Iterator {    private int index;    private List list = null;    public  ConcreateIterator(List list){        super();        this.list = list;    }    public boolean hashNext() {        if(list.getSize()>index){            return true;        }        return false;    }    public Object next() {        Object object = list.get(index);        index++;        return object;    }}

测试:

public static void main(String[] args) {        List list = new ConcreteAggregate();        list.add("a");        list.add("b");        list.add("c");        list.add("d");        Iterator it = list.iterator();        while (it.hashNext()) {            System.out.println(it.next());        }    }

打印:
a
b
c
d

0 0
原创粉丝点击