0
如果我想訪問複合節點的第七百七十七頁,並且只訪問那個葉,那麼複合模式是可能的,或者是模式域之外的那種類型的訪問?如何使用Composite Pattern訪問特定的葉子?
如果我想訪問複合節點的第七百七十七頁,並且只訪問那個葉,那麼複合模式是可能的,或者是模式域之外的那種類型的訪問?如何使用Composite Pattern訪問特定的葉子?
我假設你在談論Composite design pattern。該模式的通用版本不會讓您直接跳到樹葉,所以您必須遞歸地走孩子。在僞代碼:
stack = []
stack.push(rootElement)
results = []
while(stack is not empty) {
elt = stack.pop()
if (elt.is_leaf()) {
results.push(elt)
}
else { // not a leaf: add children to the stack
for (c in elt.children()) {
stack.push(c)
}
}
}
在這一點上,你可以訪問的results
的77元獲得第77頁,在測得的孩子,你發現了第一個「順序。請記住,一般來說,只要說出'第77葉'是不是很有意義,除非你明確說明你的排序標準是什麼。
@cs學生:我需要更多的細節才能以有意義的方式回答這個問題。也許你可以在原始問題中詳細說明一下(點擊'edit')? – phooji 2011-03-10 02:17:25
@cs學生:根據您的代碼,沒有什麼可以跳出來的。也許是對你的重組問題的一個高層次的回答:如果你有很多對象來「模型」保持跟蹤,並且你希望「視圖」對象保持同步,那麼你可以做幾件事情。一個是做發佈者/訂閱者(一種設計模式)。如果從模型到視圖對象的映射不總是從1到1,這很好,因爲你可以讓多個視圖對象監聽同一個模型對象。如果映射*爲* 1到1,那麼沒有理由不僅僅是'擴展'Swing類並實現'視圖'和'模型'行爲。 – phooji 2011-03-10 02:54:56