迭代模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代模式相关的知识,希望对你有一定的参考价值。

定义:

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

应用场景:

1. 访问一个聚合对象的内容而无需暴露它的内部表示(当不想暴漏对象内部的数据和结构,通过实现迭代器,将数据放到迭代器中提供给使用者,符合类单一原则和开闭原则)
2.支持对聚合对象的多种遍历
3.为遍历不同的聚合结构提供一个统一的接口(但出现需要获取不同对象的数据时,每个对象数据格式不一样,此刻可以要求每个对象实现迭代器,这样达到统一)
uml:
技术分享
代码实例:
public interface Iterator {
    public boolean hasNext();

    public Object next();

    public boolean remove();

}

public class MyIterator implements Iterator {
    String[] dataArray = null;
    int point = 0;
    int size = 0;

    public MyIterator(String[] dataArray, int size) {
        this.dataArray = dataArray.clone();
        this.size = size;
    }

    @Override
    public boolean hasNext() {

        return point < size ? true : false;
    }

    @Override
    public Object next() {
        // TODO Auto-generated method stub
        if (point <= size) {
            point++;

            return dataArray[point - 1];

        } else {
            throw new NullPointerException();
        }

    }

    @Override
    public boolean remove() {
        // TODO Auto-generated method stub
        return false;
    }

}


public interface Iaggregate {
    public Iterator getIterator();

}
public class AggregateA implements Iaggregate{
    static String [] data=new String[100];
    static{
        data[0]="a";
        data[1]="b";
        data[2]="c";
        data[3]="d";
        data[4]="e";
        data[5]="f";
        data[6]="g";
    }

    @Override
    public Iterator getIterator() {
        // TODO Auto-generated method stub
        return new MyIterator(data, 7);
    }

}

public class test {
    public static void main(String[] args) {
        Iterator it=new AggregateA().getIterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

}

 

 
 

 

以上是关于迭代模式的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

如何在Django视图中使用for循环返回每次迭代[关闭]

如何在UL中迭代使用appendChild和片段LI?

尝试使用片段保存夜间模式状态

是否有在单个活动中处理多个片段的 Android 设计模式?

Java源代码-迭代器模式