第220章

bookmark

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

小A:“嗯!”

大B:“最常見的是下面這種程序結構。”

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

{

//todosomething;

}

大B:“在用這個模式的時候,我們通常就調用這裡的方法,而不關心它的內部組織過程,所以讓我們來看看它的內在。”

小A:“喔?”

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

小A:“爲什麼要抽象出來一個接口?”

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

packageTreeIterator;

publicinterfaceIterator{

publicbooleanhasNext();

publicObjectnext();

}

大B:“這個接口我們有2個方法,hasNext()是否還有下一條數據,next返回具體的Object這裡也就是樹。我們先不必要忙着做它的實現類,我們現在要來做的是這個容器。”

小A:“什麼容器?”

大B:“不是Java中容器,與arraylist什麼的無關。正所謂樹的容器是什麼,是山!”

小A:“山?”

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

packageTreeIterator;

publicclassHall{

Tree[]tree;//這裡可以看作是聚合關係

privateintindex;//指向Tree[]的標籤

publicHall(intmaxNumber){

tree=newTree[maxNumber];

index=0;

}

publicvoidadd(Treetree)

{

this.tree[index]=tree;

index++;

}

publicIteratorconnectIterator()

{

returnnewTreeIterator(this);

}

}

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

packageTreeIterator;

publicclassTreeIteratorimplementsIterator{

privateintlast=0;

privateHallhall;

publicTreeIterator(Hallhall){

this.hall=hall;

}

publicbooleanhasNext(){

if(last

第73章第114章第32章第42章第135章第57章第55章第155章第213章第148章第173章第221章第212章第42章第110章第205章第197章第191章第226章第192章第88章第2章第113章第47章第143章第23章第51章第59章第85章第199章第94章第1章第4章第174章第97章第62章第85章第106章第149章第214章第165章第123章第92章第48章第224章第165章第80章第129章第109章第82章第184章第177章第186章第163章第53章第78章第177章第39章第83章第134章第1章第15章第210章第120章第216章第27章第24章第118章第10章第190章第219章第20章第223章第158章第201章第165章第206章第166章第173章第32章第35章第198章第138章第202章第168章第179章第185章第213章第195章第198章第151章第228章第167章第143章第205章第228章
第73章第114章第32章第42章第135章第57章第55章第155章第213章第148章第173章第221章第212章第42章第110章第205章第197章第191章第226章第192章第88章第2章第113章第47章第143章第23章第51章第59章第85章第199章第94章第1章第4章第174章第97章第62章第85章第106章第149章第214章第165章第123章第92章第48章第224章第165章第80章第129章第109章第82章第184章第177章第186章第163章第53章第78章第177章第39章第83章第134章第1章第15章第210章第120章第216章第27章第24章第118章第10章第190章第219章第20章第223章第158章第201章第165章第206章第166章第173章第32章第35章第198章第138章第202章第168章第179章第185章第213章第195章第198章第151章第228章第167章第143章第205章第228章