java - Java 类存储大量属性的最干净/最有效的方式
问题描述
我正在编写一个与视频游戏相关的项目,并且有一个代表每把枪的 Gun 类。我们总共将拥有 30 支左右独特的枪,它们的设置将从文件中读取,以便轻松配置值。每把枪都有 70-80 种独特的属性。有 4-5 个设置详细说明了他们的外观,5 个设置与他们重新加载有关(他们的剪辑大小,需要多长时间,需要多少弹药),10 个左右的设置与他们对其他玩家造成的伤害有关,等等,多达 80 种左右的独特设置,每把枪都不同。此外,其中大约 30 种设置是可选的,这意味着它们不适用于每把枪(例如,全自动射击之间的时间不适用于半自动枪,瞄准瞄准器属性不适用于选择不适用的枪没有景点)
我无法以可读且快速的方式将所有这些信息存储在 Gun 类中(这些值将被非常频繁地访问,因此每次从文件加载似乎效率低下)。很难找到任何对其中许多使用继承的好方法,因为有大量不同的属性组合(枪因火种而异,它们是否可以缩放或有范围等)
目前我在自己的设置类中有与同一事物相关的不同属性,每把枪剃须 7 个不同的设置类保存它们的相关设置,如图所示:
protected final int id;
private final String name;
private final String type;
private final ItemCategory tier;
private final AppearanceSettings appearanceSettings;
private final ReloadSettings reloadSettings;
private final ShootingSettings shootingSettings;
private final AimingSettings aimingSettings;
private final DamageSettings damageSettings;
private final BulletImpactSettings impactSettings;
private final SoundSettings soundSettings;```
我不确定做这样的事情是否有很多开销,内存中有〜30 * 7 = 210个只保存变量的类,或者访问所述变量是否较慢。
我能想到的其他方法之一是在 gun 类中只有 80 个左右的实例变量,但可读性显然很差。一个 80 个参数的构造函数尤其是一场噩梦。
我还在考虑有一个枚举列出所有属性并在枪类中有一个地图,这样只需要为每把可以节省空间的枪设置相关属性吗?但是,我不知道这是否会减慢访问速度。
抱歉有点啰嗦,但我想我的问题已经解决了——以可读和有效的方式存储这么多属性的最佳方法是什么?谢谢!
解决方案
正如评论中提到的,您需要在使用继承和设计模式设计类方面做一流的工作。我给你一些建议。
我不确定做这样的事情是否有很多开销,内存中有〜30 * 7 = 210个类只保存变量,或者访问所述变量是否较慢。
我不会担心内存。假设您有 30 个类,每个类有 80 个属性,平均而言,一个属性是大小为 10 的字符串。长度为 10 个字符的字符串在内存中大约有 30 个字节。所以 30 x 80 x 30 = 72KB(粗略估计),这对于平均 RAM 容量来说不算什么。访问内存中的变量基本上是即时的。
关于持久性,如果值要经常更改,我建议使用数据库。通过这种方式,您无需实现将文件映射到 Java 类的逻辑,而是将其委托给 JDBC。
一个 80 个参数的构造函数尤其是一场噩梦。
我同意,我建议坚持您当前的解决方案。您可以使用给定设置的工厂创建 Gun 类。抽象工厂模式可能很适合这里。
推荐阅读
- reactjs - ComponentClass 类型上不存在方法 navigateTo
- powershell - 使用powershell检索文本文件中的json对象
- gatling - Gatling 如何使用 .replace 函数
- java - 如何在使用 Selenium 驱动程序执行 Foreach 循环时对其进行控制?
- c - 如何将 char 值转换为二进制并分别显示每个位?
- react-native - 在 vagrant 上使用 create-react-native 应用程序热重载
- c - wglCreateContext 失败并出现错误“像素格式无效”
- c# - 如何使用 SelectContentControlsByTag 和 formattedText 将富文本粘贴到 MS Word“表单”中
- android - Android 测试共享偏好
- office365 - Sharepoint Online - 创建页脚