一. 概念 迭代子模式:迭代子模式可以順序訪問(wèn)一個(gè)聚集中的元素而不必暴露聚集的內(nèi)部表象,。多個(gè)對(duì)象聚在一起形成的總體稱之為聚集,,聚集對(duì)象是能夠包容一組對(duì)象的容器對(duì)象,。迭代子模式將迭代邏輯封裝到一個(gè)獨(dú)立的子對(duì)象中,從而與聚集本身隔開(kāi),。迭代子模式簡(jiǎn)化了聚集的界面,。每一個(gè)聚集對(duì)象都可以有一個(gè)或一個(gè)以上的迭代子對(duì)象,每一個(gè)迭代子的迭代狀態(tài)可以是彼此獨(dú)立的,。迭代算法可以獨(dú)立于聚集角色變化,。
二. 實(shí)現(xiàn) 視屏是一如既往的簡(jiǎn)單,一個(gè)小時(shí)的視屏講了兩三個(gè)模式,,所以我又把那兩本書(shū)相關(guān)內(nèi)容看了一遍,。 了解過(guò)后發(fā)現(xiàn)Iterator模式雖然很重要,但是已經(jīng)不大用了,,因?yàn)闊o(wú)論C#還是Java已經(jīng)把它封裝的很好了,,所以我這里就只實(shí)現(xiàn)了很簡(jiǎn)單的功能。 也就是用Iterator模式實(shí)現(xiàn)集合的遍歷,。 Test.java public class Test { public static void main(String[] args) { CollectionDemo collection = new ArrayListCollection(); for(int i=0; i<10; i++){ collection.add(i); } System.out.println(collection.size()); IteratorDemo iterator = collection.getIterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } } 依然從測(cè)試類開(kāi)始,,這里新建了一個(gè)集合,在插入十個(gè)值后獲取它的長(zhǎng)度并遍歷,。
CollectionDemo.java public interface CollectionDemo { public void add(Object obj); public void remove(Object obj); public IteratorDemo getIterator(); public int size(); } 這個(gè)類是集合類的接口,。
ArrayListCollection.java public class ArrayListCollection implements CollectionDemo { private Object[] objects = new Object[15]; int index = 0; @Override public void add(Object obj) { objects[index] = obj; index++; }
@Override public void remove(Object obj) { for(int i=0; i< objects.length; i++){ if(objects.equals(obj)){ objects[i] = null; } } } @Override public int size() { return index; }
@Override public IteratorDemo getIterator() { return new ArrayIterator(); } private class ArrayIterator implements IteratorDemo{ int i=-1; @Override public boolean hasNext() { if(objects[i+1] != null){ i++; return true; } return false; }
@Override public Object next() { Object result = objects[i]; return result; } }
} 這個(gè)類實(shí)現(xiàn)了接口,里面有一個(gè)內(nèi)部類,,那個(gè)內(nèi)部類就是迭代類。
IteratorDemo.java public interface IteratorDemo { public boolean hasNext(); public Object next(); } 這個(gè)類是迭代類的接口,。
三. 總結(jié) 由于這個(gè)模式并不十分重要,,也不是十分難,所以沒(méi)什么好總結(jié)的,。
|