想象一下,你有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/
我已经尝试过这种设计,但它没有成功。
我很欣赏每一个建议。
提前致谢!
答案 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