日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java描述设计模式(13):迭代器模式

發布時間:2025/3/17 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java描述设计模式(13):迭代器模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、迭代器模式

1、基礎概念

迭代器模式又叫游標模式,是對象的行為模式。迭代器模式可以順序地訪問一個聚集中的元素而不必暴露聚集的內部表象。

2、模式圖解

3、核心角色

  • Iterator:迭代器角色

此抽象角色定義出遍歷元素所需的接口。

  • ConcreteIterator:具體迭代器角色

此角色實現了Iterator接口,并保持迭代過程中的游標位置。

  • Aggregate:聚集角色

此抽象角色給出創建迭代器(Iterator)對象的接口。

  • ConcreteAggregate:具體聚集角色

聚合持有對象集合,提供返回迭代器的方法,可以正確遍歷該集合。

  • Client:客戶端角色

持有對聚集及其迭代器對象的引用,調用迭代器對象的迭代接口。

4、源碼案例

public class C02_Iterator {public static void main(String[] args) {Object[] objArray = {"one","two","three","four","five"};Aggregate aggregate = new ConcreteAggregate(objArray);Iterator iterator = aggregate.createIterator();while (!iterator.isEnd()){System.out.println(iterator.currentItem());iterator.next();}} } interface Iterator {void first();void next();boolean isEnd();Object currentItem(); } class ConcreteIterator implements Iterator{//持有被迭代的聚合對象private ConcreteAggregate agg;//記錄當前迭代索引位置private int index = 0;//設置當前聚集對象的大小private int size = 0;public ConcreteIterator (ConcreteAggregate agg){this.agg = agg;this.size = agg.getSize();index = 0;}@Overridepublic void first() {index = 0;}@Overridepublic void next() {if (index<size){index++;}}@Overridepublic boolean isEnd() {return (index>=size);}@Overridepublic Object currentItem() {return agg.getElement(index);} } abstract class Aggregate {// 創建相應迭代器對象的接口public abstract Iterator createIterator(); } class ConcreteAggregate extends Aggregate{private Object[] objArray = null;public ConcreteAggregate (Object[] objArray){this.objArray = objArray;}@Overridepublic Iterator createIterator() {return new ConcreteIterator(this);}public Object getElement (int index){if (index<objArray.length){return objArray[index];} else {return null;}}public int getSize (){return objArray.length;} }

二、JDK集合應用

1、簡單案例

public class C02_ArrayList {public static void main(String[] args) {List<String> stringList = new ArrayList<>() ;stringList.add("One") ;stringList.add("Two") ;stringList.add("Three") ;java.util.Iterator<String> itr = stringList.iterator() ;while (itr.hasNext()){System.out.println(itr.next());}} }

2、Iterator源碼

規定了集合迭代的一些方法。

public interface Iterator<E> {boolean hasNext();E next();default void remove() {throw new UnsupportedOperationException("remove");}default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());} }

3、ArrayList源碼

  • 實現聚合接口List
ArrayList<E> extends AbstractList<E> implements List<E>
  • 內部迭代器接口實現
private class Itr implements Iterator<E> {int cursor;int lastRet = -1;int expectedModCount = modCount;Itr() {}public boolean hasNext() {}public E next() {}public void remove() {}public void forEachRemaining(Consumer<? super E> consumer) {}final void checkForComodification() {} }
  • 返回迭代器
public Iterator<E> iterator() {return new Itr(); }

三、迭代器總結

1、適用場景

迭代器模式是與集合綁定,只要使用集合,就需要同時這個集合的迭代器,以此遍歷集合中的數據,java中的容器對象Collection,List、Set、Map都有自己的迭代器。容器對象在編程語言中十分核心,所以在實現容器的時候基本都有匹配的迭代器,可以滿足開發的需要,所以迭代器的自定義實踐場景比較少。

2、優點總結

簡化集合遍歷方式,每一個聚集對象都可以有一個或多個迭代器對象,每一個迭代器的迭代狀態可以是彼此獨立的。遍歷算法被封裝在迭代器角色里面,因此迭代的算法可以獨立于聚集角色變化。

四、源代碼地址

GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

總結

以上是生活随笔為你收集整理的Java描述设计模式(13):迭代器模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。