使用许多变量构造java类的更好方法

时间:2017-03-20 03:13:47

标签: java

我有一个名为Player的java类。关于播放器文件如何与服务器交互的机制需要很多解释,我对文件没有任何问题,我只想改进它并提高我的编程技巧。所以我的问题是,我如何获取我拥有的许多变量,整数,字符串,布尔值,并使代码更快,更高效/更清洁。这是一个示例,以便您可以看到文件的样子

enter code here
       public boolean usingGlory = false;
public int[] woodcut = new int [3];
public int wcTimer = 0;
public int[] mining = new int [3];
public int miningTimer = 0;
public boolean fishing = false;
public int fishtimer = 0;
public int fishXP;
public int fishies = 0;
public int fishreqt = 0;
public int fishitem = 0;
public int fishemote = 0;
public int fishies2 = 0;
public int fishreq2 = 0;
public boolean isfishing = false;
public boolean attemptingfish = false;
public int smeltType; //1 = bronze, 2 = iron, 3 = steel, 4 = gold, 5 = mith, 6 = addy, 7 = rune
public int smeltAmount;
public int smeltTimer = 0;
public boolean smeltInterface;
public boolean patchCleared;
public int[] farm = new int[2];
public boolean antiFirePot = false;
public boolean Lattack = false;
public boolean Lranged = false;
public boolean Lmagic = false;
public boolean Ldefense = false;
public boolean Lstrength = false;
public boolean Lspecial = false;
public boolean inPits = false;
public int pitsStatus = 0;      
public boolean inFunPk = false;
public boolean InDung = false;

2 个答案:

答案 0 :(得分:1)

您可以将数据分解为几个类,每个类都包含特定区域的信息。

例如,在这里,你有一组与钓鱼有关的变量 - 这些变量可以分为例如一个FishingComponent课程。还有一组关于冶炼的信息可以分成SmeltingComponent类,等等。这可能会通过将密切相关的信息和功能组放入他们自己的类中来使代码更具可读性。

为了可重用性,您可能希望使用实体组件系统。这些在游戏编程中很受欢迎,因为它们允许定制对象的构成而不仅仅是继承。例如,如果有一个NPC可能持有有关捕捞的信息但没有统计数据,则可以将捕捞组件添加到NPC实体中,并且可以重新使用与捕捞有关的所有代码。

您还提到使代码更快 - 除非您遇到特定的性能问题,否则您可能会尝试过早优化。但是,如果需要对垃圾进行大量垃圾收集,您可能希望查看池化对象,就像用垃圾收集语言编写的游戏一样,垃圾收集周期可能是framedrops的最大原因之一。

答案 1 :(得分:0)

您可能希望应用两种常见的OOP技术:封装和组合。首先,在你的班级中拥有一堆public字段是不好的做法。相反,使用 getter和setter方法 封装它们。以下是前两个变量的示例:

private boolean usingGlory = false;

public boolean isUsingGlory() {
    return usingGlory;
}

public void setUsingGlory(boolean using) {
    usingGlory = using;
}

private int[] woodcut = new int[3];

public int[] getWoodcut() {
    return woodcut;
}

public void setWoodcut(int[] woodcut) {
    this.woodcut = woodcut;
}

有关详细信息,请参阅Wikipedia

第二种技术是组合。你不喜欢在班上有这么多变数。而不是让所有变量都成为Player类的一部分,将它们分组为包含相关项的类。您甚至可以在适当时对方法进行分组!以下是使用捕鱼变量的示例:

public class Player {
    //...

    private FishingState fishingState = new FishingState();

    //Getter and setter

    //...
}

public class FishingState {

    private boolean fishing = false;
    private int timer = 0;
    private int XP;
    private int fishies = 0;
    private int reqt = 0;
    private int item = 0;
    private int emote = 0;
    private int fishies2 = 0;
    private int req2 = 0;

    //Getters and setters

    //A constructor and some methods:
    public FishingState(int XP) {
        this.XP = XP;
    }

    public void resetTimer() {
        timer = 0;
    }

}

现在,player.fishemote = 3变为player.getFishingState().setEmote(3)。更长,但更清晰。