2014-02-19 59 views
1

我讀了一本書叫做Refactoring to Patterns,而在這本書中有一個標題爲部分:提取複合(第214頁)。爲什麼以及何時應該我「提取複合」,而不是「提取超」

它暗示什麼,如果一串子類有共同的功能,你應該提取功能到一個新的超類。這聽起來很直截了當。

是什麼Extract CompositeExtract Superclass之間的區別?

那麼,根據閱讀和圖...複合應該是一個新的超類你的孩子類。參見下圖:

enter image description here

問題: 什麼是創建一個新的 「CompositeTag」 超類的目的是什麼?爲什麼不想將代碼複製移動到其原始基類(Node)?

+0

提取超類和提取合成似乎沒有什麼區別,除了你採用通用代碼的層次結構有多高。這就是剛剛向我解釋的...如果其他人想要免費增加2美分。 –

回答

1

我希望我有我的副本得心應手,但我會說他們的「Extract Composite」是「Extract Superclass」的一個特例A composite是一種特定類型的繼承關係,我想作者覺得它需要成爲分開呼叫。該圖確實說明了通常對複合材料進行的操作。我想在給出的例子中,並不是所有的子類都是複合類,所以功能不能被拉入基類。儘管如此,它確實有點像作者只是將這本書填充了一點:)

1

這裏是在Visual和WPF UIElement方面的類比。假設我們正在開發一些控件,並且我們發現(無論出於什麼奇怪的原因),我們沒有鼠標事件,並且那些按鈕需要它們。

我們可以把在Visual鼠標事件,或者我們可以把它們放在UIElement。由於鼠標事件不屬於GUI的一部分是沒有意義的,它在邏輯上屬於UIElement,這就是我們放置它們的地方。

答案:語義,特別是單一責任原則。 Visual應該照顧效果和轉換的東西,而UIElement應該照顧的重點和輸入等

我會盡量提供一個更相關的例子,但我沒有一個具體的類工作用。如果您可以從邏輯上將功能分離爲自包含的子類,那麼一定要這樣做。

相關問題