Java 存储游戏对象常量而不使用巨人“;常数“;班

Java 存储游戏对象常量而不使用巨人“;常数“;班,java,Java,基本上,我的问题与第一个问题相同,只是我必须在非常特定的时间点对每个常量执行代码 更具体地说,我正试图让我的游戏插件更多地遵循面向对象和良好的设计原则和标准。以前,我们有包含游戏对象常量的巨大类,它们有巨大的静态register方法(例如registerfirarms,registerArmor),将这些对象注册到相应的注册表中,然后将它们分配到全局常量 例如: public class Items { public static Item firearm; public st

基本上,我的问题与第一个问题相同,只是我必须在非常特定的时间点对每个常量执行代码

更具体地说,我正试图让我的游戏插件更多地遵循面向对象和良好的设计原则和标准。以前,我们有包含游戏对象常量的巨大类,它们有巨大的静态
register
方法(例如
registerfirarms
registerArmor
),将这些对象注册到相应的注册表中,然后将它们分配到全局常量

例如:

public class Items {
    public static Item firearm;

    public static void register() {
        registerFirearms();
    }

    public static void registerFirearms() {
        firearm = new FirearmItem();
        Registry.register(firearm);
    }
}
在游戏加载过程中的适当时间,
Items.register()
将被调用,并且该类中的所有值都可以在整个插件中使用


我只是不太确定如何存储这些对象实例,而不让它们拥有一些难以维护的数千行类。

如何将所有项目存储到配置文件(或者更好的是XML)中,然后再使用
项目.register()读取文件并初始化所有项目

我会做类似的事情

public class Item {
    public Item(String type /* any other thing about the item*/ ) {
        // do your stuff...
    }
}

public interface ItemCollection {
    public void register() throws YourProjectException;
}

public interface ItemSet implements ItemCollection {
    private final java.util.Set<Item> items;

    public void register() throws YourProjectException {
        try {
            // open the file
            // read each item and store it in "i"
            items.add(i); // you must override the equals method if you want each item to be added just once...
            // close the file 
        } catch(Exception ex) { // even better if you manage each exception separately
            // manage the exception 
            throw new YourProjectException();
        }
    }
}
公共类项目{
公共项(字符串类型/*关于该项的任何其他内容*/){
//做你的事。。。
}
}
公共接口项集合{
public void register()引发项目异常;
}
公共接口ItemSet实现ItemCollection{
私有最终java.util.Set项;
public void register()引发项目异常{
试一试{
//打开文件
//阅读每个项目并将其存储在“i”中
items.add(i);//如果希望每个项只添加一次,则必须重写equals方法。。。
//关闭文件
}catch(Exception ex){//如果单独管理每个异常,效果会更好
//管理异常
抛出新的YourProjectException();
}
}
}

似乎每个项目最终都需要在注册表中注册。因此,一长串的东西在某种程度上是不可避免的。因此,我认为您不必考虑代码组织问题。在我看来,这是一个问题:没有足够的数据管理工具来处理数据


如果可能的话,我建议在java代码之外管理数据,探索类似SQLite的选项。通过这种方式,您可以配置数据库,使维护项目数据的过程更加高效。然后更改java代码,使其通过对数据库的查询结果进行迭代来注册项。这将使您的数据更易于管理,并使您的java代码更简洁。

有很多这样做的游戏,例如
Minecraft
Terraria
。它们有
常量
文件,每个文件约1000行。所以我想这就是通常的做法(根本不是专家)啊,该上我的肥皂盒了。将常量分组,不是根据它们是常量这一事实,而是根据它们在设计中的逻辑归属。正如对另一个问题的公认答案所说。可能相关: