一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java使用設計模式中迭代器模式構建項目的代碼結構示例

Java使用設計模式中迭代器模式構建項目的代碼結構示例

2020-04-22 11:54匆忙擁擠repeat JAVA教程

這篇文章主要介紹了Java使用設計模式中迭代器模式構建項目的代碼結構示例,迭代器模式能夠對訪問者隱藏對象的內部細節,需要的朋友可以參考下

迭代器(Iterator)模式,又叫做游標(Cursor)模式。GOF給出的定義為:提供一種方法訪問一個容器(container)對象中各個元素,而又不需暴露該對象的內部細節。
 
迭代器模式由以下角色組成:
迭代器角色(Iterator):迭代器角色負責定義訪問和遍歷元素的接口。
具體迭代器角色(Concrete Iterator):具體迭代器角色要實現迭代器接口,并要記錄遍歷中的當前位置。
容器角色(Container):容器角色負責提供創建具體迭代器角色的接口。
具體容器角色(Concrete Container):具體容器角色實現創建具體迭代器角色的接口。這個具體迭代器角色與該容器的結構相關。

Java實現示例
類圖:

Java使用設計模式中迭代器模式構建項目的代碼結構示例

代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
/**
 * 自定義集合接口, 類似java.util.Collection
 * 用于數據存儲
 * @author stone
 *
 */
public interface ICollection<T> {
   
  IIterator<T> iterator(); //返回迭代器
  void add(T t);
  T get(int index);
}
?
1
2
3
4
5
6
7
8
9
10
11
12
/**
 * 自定義迭代器接口 類似于java.util.Iterator
 * 用于遍歷集合類ICollection的數據
 * @author stone
 *
 */
public interface IIterator<T> {
  boolean hasNext();
  boolean hasPrevious();
  T next();
  T previous();
}
?
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
/**
 * 集合類, 依賴于MyIterator
 * @author stone
 */
public class MyCollection<T> implements ICollection<T> {
 
  private T[] arys;
  private int index = -1;
  private int capacity = 5;
   
  public MyCollection() {
    this.arys = (T[]) new Object[capacity];
  }
   
  @Override
  public IIterator<T> iterator() {
    return new MyIterator<T>(this);
  }
   
  @Override
  public void add(T t) {
    index++;
    if (index == capacity) {
      capacity *= 2;
      this.arys = Arrays.copyOf(arys, capacity);
       
    }
    this.arys[index] = t;
  }
   
  @Override
  public T get(int index) {
    return this.arys[index];
  }
   
}

 

?
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
/*
 * 若有新的存儲結構,可new 一個ICollection, 對應的 new 一個IIterator來實現它的遍歷
 */
@SuppressWarnings({"rawtypes", "unchecked"})
public class Test {
  public static void main(String[] args) {
    ICollection<Integer> collection = new MyCollection<Integer>();
    add(collection, 3, 5, 8, 12, 3, 3, 5);
    for (IIterator<Integer> iterator = collection.iterator(); iterator.hasNext();) {
      System.out.println(iterator.next());
    }
     
    System.out.println("-------------");
     
    ICollection collection2 = new MyCollection();
    add(collection2, "a", "b", "c", 3, 8, 12, 3, 5);
    for (IIterator iterator = collection2.iterator(); iterator.hasNext();) {
      System.out.println(iterator.next());
    }
     
  }
   
  static <T> void add(ICollection<T> c, T ...a) {
    for (T i : a) {
      c.add(i);
    }
  }
}

打印:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
3
5
8
12
3
3
5
-------------
a
b
c
3
8
12
3
5

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩国产一区二区三区欧 | 成人久久18免费网站入口 | 亚洲 色 欧美 爱 视频 日韩 | 99只有精品 | 青柠在线完整高清观看免费 | 亚洲sss综合天堂久久久 | 日本黄色网页 | 黑人异族日本人hd | 国产精品麻豆久久99 | sss在线播放 | 金莲你下面好紧夹得我好爽 | 成年人黄视频在线观看 | 女教师巨大乳孔中文字幕免费 | 24adc年龄18岁欢迎大驾光临 | 国产午夜免费秋霞影院 | 国产精品免费精品自在线观看 | 美女翘臀内疯狂进出 | 国产精品天天看特色大片不卡 | 国产成人综合久久精品红 | 久久精品一区二区三区资源网 | 国内视频一区二区三区 | 狠狠干快播 | 外国a级片 | 99久久国产亚洲综合精品 | 九九精品视频在线观看 | 国产自拍视频网站 | 欧洲美女人牲交一级毛片 | 美女脱了内裤打开腿让人羞羞软件 | 久久免费看少妇高潮A片特爽 | 91久久综合 | 色婷婷影院在线视频免费播放 | 青青草精品 | 精品国产91久久久久久久a | 精品国产日韩亚洲一区在线 | 欧美人禽杂交在线视频 | 亚洲成人精品久久 | 亚洲午夜天堂 | 日本老妇人乱视频 | 美女被视频 | 1024免费观看完整版在线播放 | 精品国产乱码久久久久久免费 |