在objc模式中建模许多不同的类

时间:2012-08-25 11:41:29

标签: ios design-patterns model

想象一下,你有300种不同的单位。每个单位都有不同的特殊能力。例如,如果unit18靠近树,则它不可见。 Unit33和unit212具有相同的能力。如何以巧妙的方式为这300个独特单元建模?

我只有两个想法都很糟糕。为每个单元创建一个类,最后有300个类。每次我必须检查会有这样的构造:

for (Unit *unit in units)
{
    if ([unit isKindOfClass:[Unit1 class]])
    {
      // do something
    }
    else if ([unit isKindOfClass:[Unit2 class]])
    {
      // do something
    }
    else if ([unit isKindOfClass:[Unitxxx class]])
    {
      // do something
    }
}

另一个解决方案是创建一个具有所有能力的巨型怪物单元类。

我想到了这篇文章中解释的设计: http://www.learn-cocos2d.com/2010/06/prefer-composition-inheritance/

我已经尝试过这种设计,但它没有成功。 enter image description here

我很欣赏每一个建议。

提前致谢!

2 个答案:

答案 0 :(得分:1)

尝试使用Protocols。 Unit18,Unit33和Unit212都可以符合TreeInvisibility协议。

要检查单位是否符合协议,请致电[unit conformsToProtocol:@protocol(TreeInvisibility)]

这里的好处是类可以从多个协议继承。这允许您混合和匹配协议组合。


现在我考虑更多,除了所有协议之外,你仍然需要使用这种方法编写300个类。这只会使控制单元变得更容易,因为您只需要检查不同的协议而不是单个类。

它可能不是最适合您的解决方案,但希望它能帮助您指明方向。

答案 1 :(得分:0)

Ray Wenderlich刚刚发布了一篇关于基于组件的架构的新博客文章。这正是我所寻找的。 http://www.raywenderlich.com/24878/introduction-to-component-based-architecture-in-games