Java應用設計形式中迭代器形式構建項目標代碼構造示例。本站提示廣大學習愛好者:(Java應用設計形式中迭代器形式構建項目標代碼構造示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java應用設計形式中迭代器形式構建項目標代碼構造示例正文
迭代器(Iterator)形式,又叫做游標(Cursor)形式。GOF給出的界說為:供給一種辦法拜訪一個容器(container)對象中各個元素,而又不需裸露該對象的外部細節。
迭代器形式由以下腳色構成:
迭代器腳色(Iterator):迭代器腳色擔任界說拜訪和遍歷元素的接口。
詳細迭代器腳色(Concrete Iterator):詳細迭代器腳色要完成迭代器接口,並要記載遍歷中確當前地位。
容器腳色(Container):容器腳色擔任供給創立詳細迭代器腳色的接口。
詳細容器腳色(Concrete Container):詳細容器腳色完成創立詳細迭代器腳色的接口。這個詳細迭代器腳色與該容器的構造相干。
Java完成示例
類圖:
代碼:
/** * 自界說聚集接口, 相似java.util.Collection * 用於數據存儲 * @author stone * */ public interface ICollection<T> { IIterator<T> iterator(); //前往迭代器 void add(T t); T get(int index); }
/** * 自界說迭代器接口 相似於java.util.Iterator * 用於遍歷聚集類ICollection的數據 * @author stone * */ public interface IIterator<T> { boolean hasNext(); boolean hasPrevious(); T next(); T previous(); }
/** * 聚集類, 依附於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]; } }
/* * 如有新的存儲構造,可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); } } }
打印:
3 5 8 12 3 3 5 ------------- a b c 3 8 12 3 5