2011-06-09 54 views
1

我有一個名爲'Tree'的類,它實現了具有非同類節點的樹數據結構(我有三種類型的節點)。根據面向對象編程的原則,只是「樹」類必須具有關於處理和管理樹的細節以及諸如添加,搜索等的一些操作的知識。迭代樹數據結構並通過考慮樹的層次結構將信息發送到外部類

在我的GUI中,我想添加層次結構該TreeView類的一個實例的一個TreeView組件。再次根據面向對象編程的原則,treeView沒有關於樹的內部結構的信息,並且樹的內部結構被封裝並且'Tree'類表示樹的抽象接口。

所以'Tree'類可以添加節點treeView組件,但我不喜歡'Tree'類具有關於表示層的知識,並且知道如何將節點添加到像treeView這樣的特殊組件。

問題是,我正在尋找一種方式,比如使用接口或委託或類似的東西,「樹」類在樹上迭代併發送外部類的信息,但通過考慮層次結構樹結構。

+0

使用複合模式(http://en.wikipedia.org/wiki/Composite_pattern)爲您的樹層次結構類建模使用的算法。 – Heisenbug 2011-06-09 13:51:48

回答

0

我會使用Composite的組合來表示您的Tree結構和Visitor來訪問該樹來構建UI TreeView。 這裏有幾個很好的現實世界的例子,讓你開始:

http://codebetter.com/jeremymiller/2007/10/31/be-not-afraid-of-the-visitor-the-big-bad-composite-or-their-little-friend-double-dispatch/

http://codeblitz.wordpress.com/2009/07/29/perfect-match-composite-and-visitor-pattern/

訪問者模式的目的是封裝要對元素進行操作的數據結構。通過這種方式,您可以更改在結構上執行的操作,而無需更改正在操作的元素的類。使用訪問者模式允許你去耦的數據結構類和在他們