假设您有 300 种不同类型的单位。每个单位都有不同的特殊能力。例如,如果单位 18 靠近一棵树,它就会变得不可见。 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/
我已经尝试过进行这种设计,但没有成功。
我很感激每一个建议。
提前致谢!
最佳答案
尝试使用Protocols 。 Unit18、Unit33和Unit212都可以符合TreeInvisibility协议(protocol)。
要检查单元是否符合协议(protocol),请调用[unit conformsToProtocol:@protocol(TreeInvisibility)]
。
这里的好处是类可以继承多个协议(protocol)。这允许您混合和匹配协议(protocol)的组合。
现在我再想一想,除了所有的协议(protocol)之外,你仍然需要使用这种方法编写 300 个类。这使得控制单元变得更容易,因为您只需要检查不同的协议(protocol),而不是针对各个类。
这可能不是您的最佳解决方案,但希望它能帮助您指明正确的方向。
关于ios - 以 objc 模式建模许多不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121616/