国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 23種設計模式(14)java迭代器模式

23種設計模式(14)java迭代器模式

2021-02-28 11:16阿木俠 Java教程

這篇文章主要為大家詳細介紹了23種設計模式之java迭代器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

23種設計模式第十四篇:java迭代器模式

定義:提供一種方法訪問一個容器對象中各個元素,而又不暴露該對象的內部細節。

類型:行為類模式

類圖:

23種設計模式(14)java迭代器模式

如果要問java中使用最多的一種模式,答案不是單例模式,也不是工廠模式,更不是策略模式,而是迭代器模式,先來看一段代碼吧:

?
1
2
3
4
5
6
7
public static void print(Collection coll){
  Iterator it = coll.iterator();
  while(it.hasNext()){
    String str = (String)it.next();
    System.out.println(str);
  }
}

這個方法的作用是循環打印一個字符串集合,里面就用到了迭代器模式,java語言已經完整地實現了迭代器模式,Iterator翻譯成漢語就是迭代器的意思。提到迭代器,首先它是與集合相關的,集合也叫聚集、容器等,我們可以將集合看成是一個可以包容對象的容器,例如List,Set,Map,甚至數組都可以叫做集合,而迭代器的作用就是把容器中的對象一個一個地遍歷出來。

迭代器模式的結構

抽象容器:一般是一個接口,提供一個iterator()方法,例如java中的Collection接口,List接口,Set接口等。
具體容器:就是抽象容器的具體實現類,比如List接口的有序列表實現ArrayList,List接口的鏈表實現LinkList,Set接口的哈希列表的實現HashSet等。
抽象迭代器:定義遍歷元素所需要的方法,一般來說會有這么三個方法:取得第一個元素的方法first(),取得下一個元素的方法next(),判斷是否遍歷結束的方法isDone()(或者叫hasNext()),移出當前對象的方法remove(),
迭代器實現:實現迭代器接口中定義的方法,完成集合的迭代。

代碼實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
interface Iterator {
    public Object next();
    public boolean hasNext();
  }
  
  class ConcreteIterator implements Iterator{
    private List list = new ArrayList();
    private int cursor =0;
    public ConcreteIterator(List list){
      this.list = list;
    }
    public boolean hasNext() {
      if(cursor==list.size()){
        return false;
      }
      return true;
    }
    public Object next() {
      Object obj = null;
      if(this.hasNext()){
        obj = this.list.get(cursor++);
      }
      return obj;
    }
  }
  interface Aggregate {
    public void add(Object obj);
    public void remove(Object obj);
    public Iterator iterator();
  }
  
  class ConcreteAggregate implements Aggregate {
    private List list = new ArrayList();
    public void add(Object obj) {
      list.add(obj);
    }
   
    public Iterator iterator() {
      return new ConcreteIterator(list);
    }
   
    public void remove(Object obj) {
      list.remove(obj);
    }
  }
  
  public class Client {
    public static void main(String[] args){
      Aggregate ag = new ConcreteAggregate();
      ag.add("小明");
      ag.add("小紅");
      ag.add("小剛");
      Iterator it = ag.iterator();
      while(it.hasNext()){
        String str = (String)it.next();
        System.out.println(str);
      }
    }
  }

上面的代碼中,Aggregate是容器類接口,大家可以想象一下Collection,List,Set等,Aggregate就是他們的簡化版,容器類接口中主要有三個方法:添加對象方法add、刪除對象方法remove、取得迭代器方法iterator。Iterator是迭代器接口,主要有兩個方法:取得迭代對象方法next,判斷是否迭代完成方法hasNext,大家可以對比java.util.List和java.util.Iterator兩個接口自行思考。

迭代器模式的優點:

        簡化了遍歷方式,對于對象集合的遍歷,還是比較麻煩的,對于數組或者有序列表,我們尚可以通過游標來取得,但用戶需要在對集合了解很清楚的前提下,自行遍歷對象,但是對于hash表來說,用戶遍歷起來就比較麻煩了。而引入了迭代器方法后,用戶用起來就簡單的多了。
        可以提供多種遍歷方式,比如說對有序列表,我們可以根據需要提供正序遍歷,倒序遍歷兩種迭代器,用戶用起來只需要得到我們實現好的迭代器,就可以方便的對集合進行遍歷了。
        封裝性良好,用戶只需要得到迭代器就可以遍歷,而對于遍歷算法則不用去關心。

迭代器模式的缺點:

        對于比較簡單的遍歷(像數組或者有序列表),使用迭代器方式遍歷較為繁瑣,大家可能都有感覺,像ArrayList,我們寧可愿意使用for循環和get方法來遍歷集合。

迭代器模式的適用場景

       迭代器模式是與集合共生共死的,一般來說,我們只要實現一個集合,就需要同時提供這個集合的迭代器,就像java中的Collection,List、Set、Map等,這些集合都有自己的迭代器。假如我們要實現一個這樣的新的容器,當然也需要引入迭代器模式,給我們的容器實現一個迭代器。

       但是,由于容器與迭代器的關系太密切了,所以大多數語言在實現容器的時候都給提供了迭代器,并且這些語言提供的容器和迭代器在絕大多數情況下就可以滿足我們的需要,所以現在需要我們自己去實踐迭代器模式的場景還是比較少見的,我們只需要使用語言中已有的容器和迭代器就可以了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩福利影院 | 精品国产乱码久久久久久1区2区 | 国产精品二区一区二区aⅴ污介绍 | 亚洲免费不卡视频 | 最新中文字幕 | 午夜精品福利在线观看 | 国产精品久久久久久久久 | 日本在线观看一区二区 | 亚洲91| 亚洲综合大片69999 | 亚洲精品久久久久久久久久久久久 | 在线观看成人 | 一区二区自拍 | 成人av播放 | 久久久亚洲精 | 91精品福利少妇午夜100集 | 国产精品毛片在线 | 久久av综合 | 久久久亚洲综合 | 亚洲欧美激情精品一区二区 | 国产一级特黄 | 成人国产精品免费观看 | 欧美成人一区二免费视频软件 | 秋霞av电影 | 成人午夜视频在线 | 国产精品国产三级国产aⅴ中文 | 转生成为史莱姆这档事第四季在线观看 | 久久天堂 | 一片毛片| 午夜电影网 | 亚洲精品二区三区 | 色综合一区二区三区 | 亚洲人视频在线观看 | 在线精品一区 | 久久99精品视频在线观看 | 精品视频一区二区三区四区 | 国产羞羞视频 | 日日天天 | 一级中文字幕 | 亚洲国产91 | 亚洲精品久久久 |