天天看小說

第220章

大B:“迭代器模式是一種大家經(jīng)常要用到的模式,在Java的Collections中我們可以經(jīng)常應(yīng)用。”

小A:“嗯!”

大B:“最常見(jiàn)的是下面這種程序結(jié)構(gòu)。”

(Iteratori=Object.hasnext;i.next;)

{

//todosomething;

}

大B:“在用這個(gè)模式的時(shí)候,我們通常就調(diào)用這裡的方法,而不關(guān)心它的內(nèi)部組織過(guò)程,所以讓我們來(lái)看看它的內(nèi)在。”

小A:“喔?”

大B:“我給你講個(gè)例子,這個(gè)例子是我隨便想的,說(shuō)的是一個(gè)山上沒(méi)有任何的樹(shù),現(xiàn)在我們要種植幾棵樹(shù),例如:蘋(píng)果樹(shù)什麼的,然後我要遍歷這些樹(shù),給每顆樹(shù)噴灑不同的農(nóng)藥!在這個(gè)例子中我們可以看到,遍歷樹(shù)的話可以用到迭代器模式!首先我們要做個(gè)迭代器接口。”

小A:“爲(wèi)什麼要抽象出來(lái)一個(gè)接口?”

大B:“這個(gè)你就要先去了解接口的好處!”

packageTreeIterator;

publicinterfaceIterator{

publicbooleanhasNext();

publicObjectnext();

}

大B:“這個(gè)接口我們有2個(gè)方法,hasNext()是否還有下一條數(shù)據(jù),next返回具體的Object這裡也就是樹(shù)。我們先不必要忙著做它的實(shí)現(xiàn)類,我們現(xiàn)在要來(lái)做的是這個(gè)容器。”

小A:“什麼容器?”

大B:“不是Java中容器,與arraylist什麼的無(wú)關(guān)。正所謂樹(shù)的容器是什麼,是山!”

小A:“山?”

大B:“我們想想山應(yīng)該具有什麼呢?還是讓我來(lái)給你講講吧。首先它要有種植樹(shù)的功能,這裡可以看作添加樹(shù)。我們可以想像山的功能是和樹(shù)相互關(guān)聯(lián)的,那麼他們之間是什麼關(guān)係呢,我們給它們一種聚合的關(guān)係,聚合的關(guān)係大家可以參考UML圖,我在這裡給出它的一種程序表現(xiàn)形式。”

packageTreeIterator;

publicclassHall{

Tree[]tree;//這裡可以看作是聚合關(guān)係

privateintindex;//指向Tree[]的標(biāo)籤

publicHall(intmaxNumber){

tree=newTree[maxNumber];

index=0;

}

publicvoidadd(Treetree)

{

this.tree[index]=tree;

index++;

}

publicIteratorconnectIterator()

{

returnnewTreeIterator(this);

}

}

大B:“這裡我們定義的山可以抽象出Hall類來(lái),Tree[]tree可以看作是山和樹(shù)之間的一種聚合關(guān)係。add方法就是添加樹(shù)。問(wèn)題來(lái)了,山和樹(shù)有了關(guān)係,那麼山和迭代器有什麼關(guān)係呢。它們之間肯定有一種關(guān)係。我們有了這個(gè)容器(山),就要把這個(gè)容器來(lái)實(shí)現(xiàn)迭代的方法:hasNext()和Next()。這裡我們可以看出,山和迭代器之間也是一種關(guān)聯(lián)關(guān)係。我們就把它看成是一種聚合關(guān)係(聚合關(guān)係一種特殊的關(guān)聯(lián)關(guān)係)。我們可以通過(guò)一個(gè)connectIterator方法來(lái)鏈接山和迭代器,接下來(lái)我們要去做一個(gè)具體的迭代類,這個(gè)具體的類中間有了hasNext()和Next()的具體實(shí)現(xiàn)方法。”

packageTreeIterator;

publicclassTreeIteratorimplementsIterator{

privateintlast=0;

privateHallhall;

publicTreeIterator(Hallhall){

this.hall=hall;

}

publicbooleanhasNext(){

if(last

第10章第23章第73章第222章第126章第21章第6章第169章第53章第56章第130章第81章第143章第27章第133章第110章第210章第95章第139章第17章第89章第112章第227章第60章第7章第170章第59章第107章第107章第119章第131章第130章第102章第221章第49章第57章第160章第11章第91章第84章第197章第38章第223章第137章第169章第190章第62章第134章第72章第170章第19章第5章第16章第116章第21章第28章第86章第67章第180章第196章第144章第59章第109章第141章第225章第32章第68章第177章第85章第123章第65章第82章第85章第143章第85章第142章第6章第64章第220章第215章第213章第181章第177章第179章第8章第110章第173章第121章第136章第32章第44章第141章第37章第206章第101章第2章第158章第106章
第10章第23章第73章第222章第126章第21章第6章第169章第53章第56章第130章第81章第143章第27章第133章第110章第210章第95章第139章第17章第89章第112章第227章第60章第7章第170章第59章第107章第107章第119章第131章第130章第102章第221章第49章第57章第160章第11章第91章第84章第197章第38章第223章第137章第169章第190章第62章第134章第72章第170章第19章第5章第16章第116章第21章第28章第86章第67章第180章第196章第144章第59章第109章第141章第225章第32章第68章第177章第85章第123章第65章第82章第85章第143章第85章第142章第6章第64章第220章第215章第213章第181章第177章第179章第8章第110章第173章第121章第136章第32章第44章第141章第37章第206章第101章第2章第158章第106章
主站蜘蛛池模板: 江油市| 平山县| 永兴县| 乐业县| 抚州市| 芦山县| 南和县| 淮南市| 云龙县| 砀山县| 永泰县| 泰安市| 赫章县| 行唐县| 内丘县| 蛟河市| 永善县| 固安县| 织金县| 汕尾市| 都江堰市| 周至县| 阳朔县| 吉木乃县| 秦皇岛市| 河间市| 馆陶县| 姜堰市| 汾阳市| 满洲里市| 介休市| 綦江县| 孟津县| 锦屏县| 万安县| 梨树县| 同德县| 日喀则市| 鸡泽县| 山丹县| 鲁甸县|