gpt4 book ai didi

java - 初始化很多字段 - 构造函数与方法返回值

转载 作者:行者123 更新时间:2023-11-29 07:22:58 25 4
gpt4 key购买 nike

我目前正在开发一款 Java 集换式纸牌游戏,类似于旧的 Pokémon 游戏。我现在想做的是以某种方式定义所有的卡片,但是因为有很多字段需要初始化,我正在考虑替代方法,因为构造函数会很长并且每张卡片都很难读取.我还必须初始化攻击,这意味着我基本上每次都必须创建一个匿名内部类(这个术语正确吗?),如下所示:

/**
* Base set Abra 43/102
*/
public final class Abra extends Pokemon
{

public Abra()
{
super(
new ImageIcon("img/scans/base-set/43-abra.jpg"),
"Abra",
"Base Set Abra",
null,
Type.PSYCHIC,
Type.PSYCHIC,
Type.NONE,
30,
0
);

attack1 = new Attack("Psyshock", Type.NORMAL)
{

/**
* 10 damage. Flip a coin. If heads, the Defending Pokémon is now Paralyzed.
*/
public void doAttack()
{
damageApplyWeaknessAndResistance(10);
if (gui.frames.CoinFlipDialog.showCoinFlipFrame() == CoinFlip.COIN_HEADS)
{
Game.getOpponentPlayer().getActivePokemon().status = Status.Paralyzed;
}
}
};

attack2 = null;
}
}

所以我的第二个选择是创建一个包含接口(interface)和抽象类的层次结构,这意味着值不会存储在字段中,而只是在需要时由方法返回:

public interface Card extends Cloneable, MouseListener, MouseMotionListener
{
public String getFullName();

public ImageIcon getSmallIcon();

public ImageIcon getFullIcon();

}
public interface Pokemon extends Card
{
public String getName();

public int getHPLeft();

public int getMaxHP();

public Type getType();

public Type getWeakness();

public Type getResistance();

public int getRetreatCost();

public Attack getAttack1();

public Attack getAttack2();
}

public class Abra extends AbstractPokemon
{

@Override
public Attack getAttack1()
{
return new Abra.PsyShock();
}

@Override
public Attack getAttack2()
{
return null;
}


@Override
public int getMaxHP()
{
return 30;
}

@Override
public String getName()
{
return "Base Set Abra";
} //etc...

所以我的问题是:这些方法中的任何一种是首选还是有更好的方法?

最佳答案

我建议使用构建器模式。点击here寻求解释。

它由 Josh Bloch 推荐:它是他的书 Effective Java 2nd Edition 中的第 2 项。

关于java - 初始化很多字段 - 构造函数与方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com