0

我有SAGridMenu实现方法的类align。我也有SARadioMenu实现触摸相关例程的课程。两人都各自做好自己的工作。

SAGridMenu: CCMenu
SARadioMenu: CCMenu

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

更新(澄清):

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

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

4

3 回答 3

0

Various options, since they both inherit from CCMenu:

  • Put the method in CCMenu.
  • Put the method in a category on CCMenu, i.e. implement something like '@interface CCMenu (align)`. This is probably what I'd do.
  • Add an intermediate class that inherits from CCMenu and is the superclass to both of your classes, something like

    SAGridMenu : CCMenuPlusAlign : CCMenu
    SARadioMenu : CCMenuPlusAlign : CCMenu
    
于 2013-05-01T18:39:29.810 回答
0

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

于 2013-05-02T20:37:27.990 回答
0

您可以在您的第三类SAGridRadioMenu中使用Composition ,例如:

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

//You can also create properties here

通过这种方式,您的两个 SARadioMenu、SAGridMenu类保持可重用且无需复制代码(无冗余),第三类即可使用。

希望能解决您的问题。

于 2013-05-03T07:09:41.027 回答