2012-11-03 24 views
1

我有個案例: 有SomeNode,它由不同的基本部分組成:說一些類型的A,B,C。還有一個轉換功能,將SomeNode的實例轉換爲另一個SomeNode如何抽象數據和控件以支持易擴展性?

然而,可以有一些其他部分加入到SomeNode,除了A,B,C,所以說有可能是DSomeNode的第四部分。因此,轉換函數的接口也可能需要相應地更改新添加的組件SomeNode,但可能會有一些相同的邏輯共享。

然後我一直在想,抽象SomeNode及其轉換函數是否具有易擴展性?使用特質?怎麼樣?一些靈感的例子? 謝謝,

回答

1

也許我錯過了一些東西,但是你不是在尋找繼承

class SomeNode(val a: Int, val b: String, val c: Char) 

class SpecialNode(from: SomeNode, val d: List[Int]) extends 
     SomeNode(from.a, from.b, from.c) 

SpecialNodeSomeNode領域,並增加了新的d領域。轉型看起來是這樣的(當然也可以是更復雜的:

def transform(node: SomeNode) = new SpecialNode(node, Nil) 
+0

也許我沒有解釋好。我要尋找的另一件事是添加可以靈活根據需要結合其它組件。例如,我可以婉結合'D'和'E',或者只是使用'E'或'D '。在這種情況下,我們只是繼續定義所有不同類型的子類? – monica

1

我不願寫這個以犧牲顯示我的noob身份爲代價,但根據問題中使用的關鍵字,聽起來像'OOP基本原理'是什麼被要求。

「如何抽象數據和控件以支持易擴展性?」(泛化)

「有SomeNode,它是由不同的基本部分組成:」(聚合)

「還有一個變換函數,將改變SomeNode的實例,以另一SomeNode「。(多態性)

「不過,可以有一些其他部件添加到SomeNode,除了A,B,C,...功能的接口,可能還需要爲新添加的成分SomeNode發生相應的變化,但可能會有一些相同的邏輯共享。「(接口)

‘後來我一直在想,什麼是好的設計抽象SomeNode和易於擴展的轉換功能?’(繼承)基於我這個問題的解釋

,我建議研究的設計原則http://www.youtube.com/watch?NR=1&v=05jVWgKZ6MY&feature=endscreen