所以我正在爲一位教授重寫一個程序,並且我有一些與Model-View-Controller模式有關的問題。該程序被稱爲GraphViewer,用於設計和查看圖形(如圖論中的統計)。到目前爲止,我已經打算這樣結構:Java:如何在模型集合添加到時更新視圖?
- 模型
- VertexModel - 擁有ID,位置,顏色和邊緣的集合是重合
- EdgeModel - 有兩個頂點它跨越,重量,顏色,和幾個其他的事情
- 而GraphModel - 主要是,但不僅僅是,頂點集合和邊集合
- 瀏覽
- VertexView - 繪製它的頂點,並擁有自己的屬性
- EdgeView - 繪製它的邊緣,也有自身的一些特性
- GraphView - 基本上一個JPanel具有的頂點和邊視圖的集合,當它到達一個繪圖指令,它也通過的意見和問題,每個集合迭代油漆命令將它們
- 控制器
- GraphController - 照顧Ø f解釋用戶手勢以添加頂點,邊等,並更新模型。
現在的第一個問題我已經是與此相關的計劃:如果每個模型有一個觀點 - 即使只向GraphModel是一個JComponent?現在我的一部分是說 - 是因爲每個頂點和邊緣可能繪製不同。但是我的另一部分人對圖表視圖類型的並行列表結構尖叫,該結構具有與graphview的graphmodel(複雜的男孩)的集合中的模型相對應的視圖集合。不知何故,我必須研究如果頂點或邊緣模型改變,整個graphview必須重繪。我想這個答案也與每個模型是否有控制器有關。 (我剛剛接近這個錯誤嗎?)
第一個問題的答案有點與我的第二個問題有關:我將如何知道通知graphview是否將一個vertexmodel添加到graphmodel的集合中?如果設置了一個全新的集合,它將在它進入setEdges()方法時通知視圖。但是如果我必須編寫getEdges()。add(...)呢?現在圖形視圖需要通知更新,但setEdges從未被稱爲...
感謝一堆,因爲你可以告訴我有點新的設計模式!
啊,有趣。所以你會有一個GraphModel,EdgeModel有Edge和VertexModel有Vertices?那麼GraphView是否有EdgeView和VertexView?另外,如果我們確定GraphView更新,例如Vertex的位置發生了變化,我該如何確定?對於所有僅僅獲取值的重寫方法(比如iterator()和size()),這似乎就是很多不必要的代碼。這是否意味着我永遠不會暴露可變對象(如Vertex中的Point2D和Edge中的Arc2D)? – 0x24a537r9 2010-03-07 09:43:10
另外,我不會遇到與實現迭代器()相同的問題?然後,您可以編輯其中一個元素,而不會更新。現在,這對於一系列觀察對象來說不是問題,但是當我爲Edge封裝Arc2D類時呢?我有一個getPathIterator方法。我只是擔心如果每個類的每個部分都必須通知更新,我會卡在Java API中包裝所有內容以實現可觀察性。 – 0x24a537r9 2010-03-07 23:54:40