ios - 以 objc 模式建模许多不同的类

标签 ios design-patterns model

假设您有 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/

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

我很感激每一个建议。

提前致谢!

最佳答案

尝试使用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/

相关文章:

ios - React Native - 无法打开 launchPackager.command

ios - 同一系统上的不同 NSUserDefaults

java - Guice @Singleton 必须遵循 Singleton 设计模式吗?

ruby-on-rails - Ruby on Rails : filter associations on model based on several conditions

iphone - "Plugin handled load"在 UIWebView 的网页中播放视频时出现对话框

ios - 如何在没有 Storyboard的情况下以编程方式在 iOS8 上创建今日小部件?

user-interface - 生产中使用的错误处理策略

c# - 应用程序时间的设计模式?

ruby-on-rails - 如何从模型调用辅助方法?

c# - 从模型中获取特定的十进制长度