迭代器模式

提供一種方法來順序訪問聚合對象中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。

  package com.strife.pattern.iterator;

/**
 * 迭代器模式
 *
 * @author mengzhenghao
 * @date 2022/6/2
 */
public class IteratorCode {

    public static void main(String[] args) {
        String[] strs = new String[]{"str1", "str2", "str3", "str4"};
        ConcreteAggregate<String> aggregate = new ConcreteAggregate<>(strs);
        Iterator<String> iterator = new ConcreteIterator<>(aggregate);

        while (iterator.hasNext()) {
            final String ne = iterator.next();
            System.out.println(ne);
        }
    }
}

/** 抽象迭代器 */
interface Iterator<T> {

    boolean hasNext();

    T next();
}

/** 具體迭代器 */
class ConcreteIterator<T> implements Iterator<T> {

    /** 持有被迭代的聚合對象 */
    private ConcreteAggregate<T> aggregate;

    /** 當(dāng)前迭代的索引位置 */
    private int index;

    /** 聚合對象的大小 */
    private int size;

    public ConcreteIterator(ConcreteAggregate<T> aggregate) {
        this.aggregate = aggregate;
        this.index = -1;
        this.size = aggregate.size();
    }

    @Override
    public boolean hasNext() {
       return index < aggregate.size() - 1;
    }

    @Override
    public T next() {
        return aggregate.getElement(++index);
    }
}

/** 統(tǒng)一的聚合接口,將客戶端和具體聚合解耦 */
abstract class AbstractAggregate<T> {

    /** 創(chuàng)建相應(yīng)迭代器對象的接口 */
    public abstract Iterator<T> createIterator();
}

/** 具體聚合,持有對應(yīng)的集合 */
class ConcreteAggregate<T> extends AbstractAggregate<T> {

    private T[] array;

    public ConcreteAggregate(T[] array) {
        this.array = array;
    }

    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }

    public T getElement(int index) {
        if (index < array.length) {
            return array[index];
        } else {
            return null;
        }
    }

    public int size() {
        return array.length;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容