<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>

          設計模式詳解——迭代器模式

          共 1076字,需瀏覽 3分鐘

           ·

          2021-10-20 14:50

          前言

          今天我們要學習的這個設計模式,我們其實在日常開發(fā)中也經(jīng)常用到,但也僅僅只是用過,所以很多時候我都不覺得它是一種設計模式,它就是迭代器模式,由于這個設計模式比較簡單,所以關于它我們能講的內(nèi)容也不多,因此呢,今天的內(nèi)容也就比較少。

          迭代器模式

          迭代器模式(Iterator Pattern)是 Java.Net 編程環(huán)境中非常常用的設計模式。這種模式用于順序訪問集合對象的元素,不需要知道集合對象的底層表示。

          迭代器模式提供了一種方法順序,訪問一個聚合對象中的各個元素,而又不暴露其內(nèi)部具體實現(xiàn)細節(jié)

          要點

          • 迭代器模式讓我們能游走于聚合內(nèi)的每一個元素,而又不暴露其內(nèi)部的實現(xiàn)細節(jié)
          • 把游走的任務放在迭代器上,而不是聚合上。這樣簡化了聚合的接口和實現(xiàn),也讓責任各得其所

          應用

          關于迭代器模式,用的最多的當然就是java容器部分的相關內(nèi)容,比如Collection接口。這里我們通過一個簡易的手寫容器,來演示它具體的應用場景。

          適配器接口

          首先是迭代器的接口,它有兩個方法,一個用于判斷容器是否包含元素;另一個用于拿出容器中的當前角標最小的元素(默認為為0

          public?interface?Iterator?{
          ???boolean?hasNext();
          ???Object?next();
          }
          容器接口

          然后是容器接口,容器接口只有一個方法,就是獲取迭代器。

          public?interface?Container?{
          ???Iterator?getIterator();
          }
          容器實現(xiàn)

          容器的內(nèi)部實現(xiàn)包括了迭代器的實現(xiàn)

          public?class?SyskeContainer?implements?Container?{
          ???public?Object[]?values?=?{"云中志"?,?"java"?,"志哥"?,?"syske"};
          ?
          ???@Override
          ???public?Iterator?getIterator()?{
          ??????return?new?SyskeIterator();
          ???}
          ?
          ???private?class?SyskeIterator?implements?Iterator?{
          ?
          ??????int?index;
          ?
          ??????@Override
          ??????public?boolean?hasNext()?{
          ?????????if(index?????????????return?true;
          ?????????}
          ?????????return?false;
          ??????}
          ?
          ??????@Override
          ??????public?Object?next()?{
          ?????????if(this.hasNext()){
          ????????????return?values[index++];
          ?????????}
          ?????????return?null;
          ??????}?????
          ???}
          }
          測試代碼

          下面的測試代碼也很簡單,就是獲取SyskeContainer的迭代器,然后通過它的迭代器,實現(xiàn)對SyskeContainer容器的遍歷操作:

          public?class?SyskeContainerTest?extends?TestCase?{

          ????public?void?testIterator()?{
          ????????SyskeContainer?syskeContainer?=?new?SyskeContainer();
          ????????Iterator?iterator?=?syskeContainer.getIterator();
          ????????while?(iterator.hasNext())?{
          ????????????System.out.println(iterator.next());
          ????????}
          ????}

          }

          運行結(jié)果如下:

          總結(jié)

          從上面的內(nèi)容以及我們的代碼中其實可以看出來,相比于我們前面講到的設計模式,迭代器的內(nèi)容就顯得比較少,而且比較簡單,更重要的是,它的應用場景也很窄,基本上都是集中在批量操作的業(yè)務中,所起的作用就是代替具體的容器,實現(xiàn)遍歷操作,然后實現(xiàn)具體容器與業(yè)務之間的耦合關系。

          - END -


          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  91琪琪 | 久久成人无码电影 | 男女直接拍拍 | 午夜福利资源 | 欧美成人精品一区二区特级毛片 |