如何在没有多重继承的情况下重用代码?

时间:2013-05-01 18:31:16

标签: ios objective-c inheritance cocos2d-iphone

我有SAGridMenu类正在实现方法align。我也有类SARadioMenu,它正在实现与触摸相关的例程。他们两人都做得很好。

SAGridMenu: CCMenu
SARadioMenu: CCMenu

我现在想要的是创建组合这两个类的类 - SARadioGridMenu。 Objective C中没有多重继承,所以我不能拥有从两者继承的类。结合它们的最有效方法是什么?

更新(澄清):

两个子类都使用ivars,因此类别不是最佳选择。

基本上我有两段代码。 1.对齐和2.触摸相关。最终目标是拥有3个没有冗余的类 - SAGridMenu, SARadioMenu and SAGridRadioMenu。作为临时解决方案,我从SAGridRadioMenu继承了SARadioMenu并将align代码复制到其中。希望找到更好的解决方案。

3 个答案:

答案 0 :(得分:0)

各种选项,因为它们都继承自CCMenu

  • 将方法放在CCMenu中。
  • 将该方法放在CCMenu上的类别中,即实现类似'@interface CCMenu(align)`的内容。这可能就是我要做的事。
  • 添加一个继承自CCMenu的中间类,它是两个类的超类,类似

    SAGridMenu : CCMenuPlusAlign : CCMenu
    SARadioMenu : CCMenuPlusAlign : CCMenu
    

答案 1 :(得分:0)

根据方法的具体细节,您可以将方法align和/或触摸相关例程实现为类方法。类方法可以使用CCMenu或具有必要的ivars作为参数的协议。例如,SARadioGridMenu会从SARadioMenu继承,并会调用[SAGridMenu align:self]SAGridMenu也会调用[SAGridMenu align:self]来调用对齐方法。

答案 2 :(得分:0)

您可以在第三课中使用作文 SAGridRadioMenu 赞:

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

//You can also create properties here

通过这种方式,您的 SARadioMenu,SAGridMenu 类都可以重复使用,无需复制代码(无冗余),第三类就可以使用了。

希望能解决您的问题。