【学习笔记】设计模式-迭代器模式

来源:互联网 发布:远走高飞网络歌曲 编辑:程序博客网 时间:2024/06/06 15:52

前言

本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录

迭代器模式

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

需求

请将数组和List的打印方法改用使用迭代器遍历的方法实现

需求分析

数组打印方法

    public void printDatas() {        for (int i = 0; i < datas.length; i++) {            datas[0] = i;            System.out.print(ArrayData.class.getSimpleName() + " : " + datas[i]);        }    }

List打印方法

    public void printDatas() {        for (int i = 0; i < 10; i++) {            System.out.print(ListData.class.getSimpleName() + " : " + datas.get(i));        }    }

如何将datas[i]和datas.get(i)完善成类似下面

    public void printDatas() {        while (hasNext()) {            System.out.print("printDatas : " + next());        }    }

开发

数组的迭代器实现

public class ArrayDataIterator implements Iterator {    Integer[] datas;    int position = 0;    public void createArrayDataIterator() {        for (int i = 0; i < datas.length; i++) {            datas[0] = i;        }    }    @Override    public boolean hasNext() {        if (position >= datas.length || datas[position] == null) {            return false;        } else {            return true;        }    }    @Override    public Object next() {        return datas[++position];    }    public void printDatas() {        while (hasNext()) {            System.out.print("printDatas : " + next());        }    }}

List的迭代器实现

public class ListDataIterator implements Iterator {    private ArrayList<Integer> datas = new ArrayList<>();    int position = 0;    public void createIterator() {        for (int i = 0; i < 10; i++) {            datas.add(i);        }    }    @Override    public boolean hasNext() {        if (position >= datas.size() || datas.get(position) == null) {            return false;        } else {            return true;        }    }    @Override    public Object next() {        return datas.get(position);    }    public void printDatas() {        while (hasNext()) {            System.out.print("printDatas : " + next());        }    }}
原创粉丝点击