首页 > 解决方案 > 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 个参数的构造函数尤其是一场噩梦。

我还在考虑有一个枚举列出所有属性并在枪类中有一个地图,这样只需要为每把可以节省空间的枪设置相关属性吗?但是,我不知道这是否会减慢访问速度。

抱歉有点啰嗦,但我想我的问题已经解决了——以可读和有效的方式存储这么多属性的最佳方法是什么?谢谢!

标签: javaclass

解决方案


正如评论中提到的,您需要在使用继承和设计模式设计类方面做一流的工作。我给你一些建议。

我不确定做这样的事情是否有很多开销,内存中有〜30 * 7 = 210个类只保存变量,或者访问所述变量是否较慢。

我不会担心内存。假设您有 30 个类,每个类有 80 个属性,平均而言,一个属性是大小为 10 的字符串。长度为 10 个字符的字符串在内存中大约有 30 个字节。所以 30 x 80 x 30 = 72KB(粗略估计),这对于平均 RAM 容量来说不算什么。访问内存中的变量基本上是即时的。

关于持久性,如果值要经常更改,我建议使用数据库。通过这种方式,您无需实现将文件映射到 Java 类的逻辑,而是将其委托给 JDBC。

一个 80 个参数的构造函数尤其是一场噩梦。

我同意,我建议坚持您当前的解决方案。您可以使用给定设置的工厂创建 Gun 类。抽象工厂模式可能很适合这里。


推荐阅读