2013-05-01 77 views
0

我有SAGridMenu類正在實現方法align。我也有類SARadioMenu這是實施觸摸相關的例程。兩人都單獨工作。如何重用沒有多繼承的代碼?

SAGridMenu: CCMenu 
SARadioMenu: CCMenu 

我現在想要的是創建類組合這兩個類 - SARadioGridMenu。 Objective C中沒有多重繼承,所以我無法從兩者繼承一個類。什麼是最有效的方法來結合他們?

更新(澄清):

兩個子類使用實例變量,因此類是不是一個最好的選擇。

基本上我有兩段代碼。 1.對齊和2.觸摸相關。最終目標是有3個班級沒有冗餘 - SAGridMenu, SARadioMenu and SAGridRadioMenu。作爲一種臨時解決方案,我從SARadioMenu繼承了SAGridRadioMenu,並將align代碼複製到其中。希望找到更好的解決方案。

回答

0

各種選項,因爲它們都來自CCMenu繼承:

  • 把方法CCMenu
  • 將該方法放在CCMenu的類別中,即實現類似'@interface CCMenu(align)`的操作。這可能是我會做的。
  • 添加一箇中間類,從CCMenu繼承並超到這兩個類的,像

    SAGridMenu : CCMenuPlusAlign : CCMenu 
    SARadioMenu : CCMenuPlusAlign : CCMenu 
    
+0

第一個選項不夠好,因爲我不想修改cocos。第二個選項需要黑客,因爲我有ivars。第三個選項很有趣,但不會出現我可以重新使用觸摸相關的代碼。 'SAGridMenu - 確定'。 'SARadioMenu - OK'。 'SAGridRadio' ...需要複製觸摸相關的事件。 – Pablo 2013-05-01 20:14:22

+0

應該提到ivars的問題... – 2013-05-01 21:27:23

+0

我的不好。我已通過澄清更新我的問題。抱歉。 – Pablo 2013-05-01 21:33:20

0

根據方法的具體細節,你可能能夠實現方法align和/或觸摸相關例程作爲類方法。類方法可以採用CCMenu或帶有必要的ivars作爲參數的協議。例如,SARadioGridMenu將從SARadioMenu繼承,並且會調用[SAGridMenu align:self]SAGridMenu也會調用[SAGridMenu align:self]以調用align方法。

0

您可以使用你的第三類SAGridRadioMenu組成

@interface SAGridRadioMenu : CCMenu { 
    SARadioMenu * _radioMenu; 
    SAGridMenu * _gridMenu; 
} 

//You can also create properties here 

這樣既您SARadioMenu,SAGridMenu類留重用性和不復制的代碼(無冗餘),,第三課準備好使用。

希望能夠解決您的問題。

+0

我看不出組合如何幫助。 – Pablo 2013-05-03 10:47:34

+0

你能解釋爲什麼作文不適用於此... @ – 2013-05-03 10:53:22