<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      設(shè)計(jì)模式之迭代器模式

      迭代器模式很多人都熟悉,但是什么是迭代器,為什么要用迭代器?
      這個(gè)很多人就很難做出具體回答了,只是知道如果有了迭代器,那么我們就能foreach遍歷了,方便循環(huán)處理。
      這只是對(duì)迭代器的用途,進(jìn)行了回答,foreach語(yǔ)法是java1.5時(shí)加入的語(yǔ)法糖,那么在這之前呢,之前是怎么做的?
      要知道并不是所有容器都支持以索引位置的形式,來(lái)獲取某個(gè)具體位置的元素,那么對(duì)于這種無(wú)序的容器當(dāng)時(shí)怎么遍歷呢?
      這就要說(shuō)到迭代器模式了
      迭代器模式就是你不需要了解容器內(nèi)部數(shù)據(jù)存儲(chǔ)的細(xì)節(jié),就可以依次的,按照某種順序獲取完容器里邊的元素。

      迭代器模式(Iterator Pattern)是面向?qū)ο蟮?3種設(shè)計(jì)模式中的一種,屬于行為模式的范圍。
      而在java中,已經(jīng)開(kāi)好默認(rèn)的接口,你只需要按照接口的約定來(lái)實(shí)現(xiàn)對(duì)應(yīng)的方法即可:
      類圖如下:

       

      我們按照要求寫一份實(shí)現(xiàn)代碼,與以往容器不同的是,數(shù)據(jù)雖然只存了一份,但是我們要求遍歷的時(shí)候,每份數(shù)據(jù)我都能遍歷若干份:

      容器類、迭代器類

       1 package com.example.demo.learn.pattern.behavior.iter;
       2 
       3 import java.util.Iterator;
       4 
       5 /**
       6  * @discription
       7  */
       8 public class FixCollection<T> implements Iterable<T> {
       9     Object[] data;
      10 
      11     int max;
      12 
      13     int cur = 0;
      14 
      15     int loop = 0;
      16 
      17     public FixCollection(int max, int loop) {
      18         this.max = max;
      19         data = new Object[max];
      20         this.loop = loop;
      21     }
      22 
      23     public boolean addData(T t) {
      24         if (cur < max) {
      25             data[cur++] = t;
      26             return true;
      27         }
      28         return false;
      29     }
      30 
      31 
      32     @Override
      33     public Iterator<T> iterator() {
      34         return new LoopIterator();
      35     }
      36 
      37     class LoopIterator implements Iterator<T> {
      38         // 索引位置:
      39         int index = 0;
      40 
      41 
      42         public LoopIterator() {
      43         }
      44 
      45         public boolean hasNext() {
      46             return cur * loop >= (index + 1);
      47         }
      48 
      49         public T next() {
      50             int i = index++ % cur;
      51             return (T) data[i];
      52         }
      53     }
      54 }

      主類

       1 package com.example.demo.learn.pattern.behavior.iter;
       2 
       3 import lombok.extern.slf4j.Slf4j;
       4 
       5 import java.util.Iterator;
       6 
       7 /**
       8  * @discription
       9  */
      10 
      11 @Slf4j
      12 public class IterMain {
      13     public static void main(String[] args) {
      14         FixCollection<String> collection = new FixCollection(4, 3);
      15         collection.addData("1a");
      16         collection.addData("2a");
      17         collection.addData("3a");
      18         collection.addData("4a");
      19         collection.addData("5a");
      20         Iterator<String> iter = collection.iterator();
      21         int i = 0;
      22         while (iter.hasNext()) {
      23             log.warn("iter element is {}:{}", i++, iter.next());
      24         }
      25 
      26         int j = 0;
      27         for (String item : collection) {
      28             log.warn("for element is {}:{}", j++, item);
      29         }
      30     }
      31 }

       調(diào)用結(jié)果如下:(防盜連接:本文首發(fā)自http://www.rzrgm.cn/jilodream/ )

      16:51:57.870 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 0:1a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 1:2a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 2:3a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 3:4a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 4:1a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 5:2a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 6:3a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 7:4a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 8:1a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 9:2a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 10:3a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - iter element is 11:4a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 0:1a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 1:2a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 2:3a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 3:4a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 4:1a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 5:2a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 6:3a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 7:4a
      16:51:57.873 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 8:1a
      16:51:57.874 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 9:2a
      16:51:57.874 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 10:3a
      16:51:57.874 [main] WARN com.example.demo.learn.pattern.behavior.iter.IterMain - for element is 11:4a

      主要的步驟是這樣的:

      1、我們自定義的容器,實(shí)現(xiàn)Iterable接口,表示自定義容器支持返回一個(gè)迭代器。
      2、我們返回的迭代器,實(shí)現(xiàn)Iterator 接口,支持迭代器的基本方法(還有沒(méi)有下一個(gè)元素 hasNext(),以及返回下一個(gè)元素next())。

      這樣我們就可以使用迭代器了,也可以像示例那樣使用foreach語(yǔ)法糖 來(lái)遍歷,由編譯器幫我完成相對(duì)晦澀的轉(zhuǎn)寫。
      這時(shí)候有人就問(wèn)了,這個(gè)迭代器模式有點(diǎn)太死板了,我的容器類直接支持依次的返回對(duì)象,還算迭代器模式么?(防盜連接:本文首發(fā)自http://www.rzrgm.cn/jilodream/ )
      答案是算,只要你的容器不暴露具體數(shù)據(jù),并且支持依次的返回?cái)?shù)據(jù)元素,就算是迭代器模式。只是你現(xiàn)在將容器和迭代器的功能合為一體了,容器還要維護(hù)外界的訪問(wèn)狀態(tài),相對(duì)來(lái)說(shuō)不如官方約定的那么優(yōu)雅。
      不要把設(shè)計(jì)模式想的過(guò)于復(fù)雜、刻板,其實(shí)我們?cè)诎凑彰嫦驅(qū)ο笤瓌t處理問(wèn)題時(shí),就已經(jīng)在有意無(wú)意的使用各種設(shè)計(jì)模式了。

      posted @ 2024-08-31 16:55  王若伊_恩賜解脫  閱讀(119)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 国产精品天天看天天狠| 久久综合激情网| 狠狠亚洲色一日本高清色| 最新精品国偷自产在线美女足| 国产成人免费ā片在线观看| 麻豆成人久久精品二区三| 来安县| 久久夜色精品久久噜噜亚| 日韩有码国产精品一区| 色九月亚洲综合网| 午夜成人无码免费看网站| 爆乳喷奶水无码正在播放| 桃花岛亚洲成在人线AV| 惠东县| 国产成人8X人网站视频| 9色国产深夜内射| 最新国产精品精品视频| 亚洲一区在线观看青青蜜臀| 国产精品中文字幕二区| 江门市| 蜜臀av午夜精品福利| 鲁丝一区鲁丝二区鲁丝三区| 狠狠色丁香婷婷综合尤物| 日韩有码中文字幕一区二区| 久久久久国精品产熟女久色| 亚洲欧美不卡视频在线播放| 欧美熟妇性XXXX欧美熟人多毛| 久久综合亚洲色一区二区三区| 狠狠色综合久久丁香婷婷| 亚洲乱码中文字幕小综合| 国产久免费热视频在线观看| 亚洲av中文久久精品国内| 午夜免费无码福利视频麻豆| 亚洲精品漫画一二三区| 神马久久亚洲一区 二区| 亚洲国产午夜精品理论片在线播放| 中文字幕久久精品波多野结| 亚洲a∨国产av综合av下载| 久久亚洲精品成人综合网| 亚洲国产午夜精品福利| 成人无码视频97免费|