<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          「補課」進(jìn)行時:設(shè)計模式(13)——迭代器模式

          共 2704字,需瀏覽 6分鐘

           ·

          2020-11-18 20:37

          1. 前文匯總

          「補課」進(jìn)行時:設(shè)計模式系列

          2. 迭代器模式

          一說到迭代器,我首先想到的就是 Java 中的 java.util.Iterator 接口,打開看了一下 JDK1.8 的 API 文件,可以看到是從 1.2 的版本中開始添加 java.util.Iterator 這個接口,并逐步把 Iterator 應(yīng)用到各個聚集類(Collection)中,同時可以看到另一個接口 java.lang.Iterable ,可以看到 java.lang.Iterable 有很多的子類以及實現(xiàn)類:

          基本上我們?nèi)粘J褂玫念惗荚谏厦孢@張圖里了, Java 把迭代器模式已經(jīng)加入到了最基本的 API 當(dāng)中,我們在使用各種集合進(jìn)行迭代的時候才能如此的輕松寫意。

          2.1 定義

          迭代器模式(Iterator Pattern)目前已經(jīng)是一個沒落的模式,基本上沒人會單獨寫一個迭代器,除非是產(chǎn)品性質(zhì)的開發(fā),其定義如下:

          Provide a way to access the elements of an aggregate object sequentiallywithout exposing its underlying representation.(它提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內(nèi)部細(xì)節(jié)。)

          • Iterator: 抽象迭代器,基本上是有固定的3個方法:first() 獲得第一個元素, next() 訪問下一個元素, hasNext() 是否已經(jīng)訪問到底部。
          • ConcreteIterator: 具體迭代器角色要實現(xiàn)迭代器接口,完成容器元素的遍歷。
          • Aggregate: 抽象容器,負(fù)責(zé)提供創(chuàng)建具體迭代器角色的接口。
          • ConcreteAggregate: 具體容器實現(xiàn)容器接口定義的方法,創(chuàng)建出容納迭代器的對象。

          抽象迭代器:

          public?interface?Iterator?{
          ????Object?next();

          ????boolean?hasNext();

          ????boolean?remove();
          }

          具體迭代器:

          public?class?ConcreteIterator?implements?Iterator?{

          ????private?Vector?vector?=?new?Vector();

          ????public?int?cursor?=?0;

          ????public?ConcreteIterator(Vector?vector)?{
          ????????this.vector?=?vector;
          ????}

          ????@Override
          ????public?Object?next()?{
          ????????Object?result?=?null;
          ????????if?(this.hasNext())?{
          ????????????result?=?this.vector.get(this.cursor++);
          ????????}?else?{
          ????????????result?=?null;
          ????????}
          ????????return?result;
          ????}

          ????@Override
          ????public?boolean?hasNext()?{
          ????????if?(this.cursor?==?this.vector.size())?{
          ????????????return?false;
          ????????}?else?{
          ????????????return?true;
          ????????}
          ????}

          ????@Override
          ????public?boolean?remove()?{
          ????????this.vector.remove(this.cursor);
          ????????return?true;
          ????}
          }

          抽象容器:

          public?interface?Aggregate?{
          ????void?add(Object?o);
          ????void?remove(Object?o);
          ????Iterator?iterator();
          }

          具體容器:

          public?class?ConcreteAggregate?implements?Aggregate?{

          ????private?Vector?vector?=?new?Vector();

          ????@Override
          ????public?void?add(Object?o)?{
          ????????this.vector.add(o);
          ????}

          ????@Override
          ????public?void?remove(Object?o)?{
          ????????this.vector.remove(o);
          ????}

          ????@Override
          ????public?Iterator?iterator()?{
          ????????return?new?ConcreteIterator(vector);
          ????}
          }

          測試類:

          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????Aggregate?agg?=?new?ConcreteAggregate();
          ????????agg.add("aaa");
          ????????agg.add("bbb");
          ????????agg.add("ccc");
          ????????Iterator?iter?=?agg.iterator();
          ????????while?(iter.hasNext())?{
          ????????????System.out.println(iter.next());
          ????????}
          ????}
          }

          反過頭來在看下 JDK 中的 Iterable 接口。java.lang.Iterable 接口只有一個方法:iterator() ,也就說,通過 iterator() 這個方法去遍歷聚集類中的所有方法或?qū)傩裕旧犀F(xiàn)在所有的高級語言都有 Iterator 這個接口或者實現(xiàn), Java 已經(jīng)把迭代器給我們準(zhǔn)備好了,我們再去寫迭代器,就有點多余了。所以呀,這個迭代器模式也有點沒落了,基本上很少有項目再獨立寫迭代器了,直接使用 Collection 下的實現(xiàn)類就可以完美地解決問題。




          感謝閱讀



          瀏覽 54
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  波多野结衣av免费 | 人妻3区| 一道本在线无码 | 一级内射在线 | 2024无码在线 |