第220章(1 / 1)

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

小A:“嗯!”

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

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

小A:“喔?”

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

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

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

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

小A:“什麼容器?”

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

小A:“山?”

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

Treetree;//這裏可以看作是聚合關係

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

(本章完)