2012-04-11 79 views
1

我想知道在需要角色或特徵的情況下應該做什麼,但是在經典的繼承環境中。我有兩節課,其中兩節課都是來自根類,但是我想將兩條路上的分開的課程連接在一起,以共享相同的功能。請看下圖:古典繼承差異

+-- Base 
+-- Base_Processor 
| +-- Base_Processor_Request 
| +-- Base_Processor_Request_Ajax 
+-- Base_Impl 
    +-- Base_Impl_MyImpl 
    +-- Base_Impl_MyImpl_Processor (extends from Base_Processor) 
    +-- Base_Impl_MyImpl_Processor_Request (extends from ??) 
    +-- Base_Impl_MyImpl_Processor_Request_Ajax (extends from ??) 

會是什麼,同時還從Base_Impl_MyImpl_Processor延伸到連接Base_Impl_MyImpl_Processor_Request和Base_Processor_Request在一起的最佳方式,並且也以同樣的方式鏈接Base_Impl_MyImpl_Processor_Request_Ajax。

謝謝先進。

+2

更喜歡構成的繼承。 – 2012-04-11 18:40:59

回答

2

我同意100%使用Alex Burtsev的評論 - 許多級別的繼承看起來像一個依賴性夢魘(而且,正如你發現的,當你使用很多繼承時,很難在類之間重用特定的代碼段) 。

通常我不希望特性類被插入層次結構 - 在我看來,特性是獨立的概念,它定義了實現細節的變化,因此只屬於接口而不是從基礎派生類

如果這是現有的代碼,並且您有多個元素需要在不同的派生類中重複使用,我認爲將這些元素分割爲與您的層次無關的獨立類會更有意義。

看來Processor,RequestAjax可以更好地爲您服務作爲單獨的實體。

+0

所以,糾正我,如果我錯了,但你說我應該使那些進入接口,而不是重用Base和Impl中的代碼,對嗎?但他們都會實現相同的接口。順便謝謝你的迴應! – Kyle 2012-04-12 02:52:02

+0

沒關係。找出你的意思[組成與繼承](http://www.artima.com/designtechniques/compoinh.html)謝謝! – Kyle 2012-04-12 03:00:28