通过构造函数和“this”关键字重新分配对象

时间:2014-06-16 02:02:26

标签: java constructor this

我正在尝试扩展我的程序,以允许具有类似代码库的不同NPC。我希望有一个超级NPC,每个生物都有各种子类。在这里,我将称之为Enemy1,Enemy2和Enemy3。

我还希望通过NPC enemy = new NPC(enemyID);将任何给定的NPC分配给变量,其中“enemyID”是表示NPC游戏内id的整数(让Enemy1的ID = 1,Enemy2 = 2,Enemy3 = 3)

即使这样可行,但在实践中是否可行(我还没有测试过,因为实际的代码会有更深入的功能):

public class NPC
{
    public NPC(int id)
    {
        switch (id)
        {
            case 1:
            {
                this = new Enemy1();
                break;
            }
            case 3:
            {
                this = new Enemy3();
                break;
            }
            case 3:
            {
                this = new Enemy3();
                break;
            }
        }
    }
    //Various default and shared methods will follow
}

public class Enemy1 extends NPC
{
    //Various variables specific to this enemy
    public Enemy1()    //LOL
    {
        //Assign default values
    }
    //Default methods overwritten and enemy-specific methods go here
}

我不确定是否会编译,因为我还没有完整的实现,但我只是想知道一个对象是否可以这种方式自我重新分配,如果这是一个好的编程选择。如果你需要澄清,请告诉我,请在答案中给我理由,这样我就可以学习而不只是得到一个是/否答案(我是自学成才,所以反馈特别有用)。

1 个答案:

答案 0 :(得分:0)

如你所知,它不会编译。您正在寻找的模式称为factory,而不是直接创建对象,而是调用"工厂"具有各种参数的函数,该函数创建并返回适当的对象。

一个非常非常基本的例子看起来像这样:

public class Enemy1 extends NPC {
}
public class Enemy2 extends NPC {
}

public class NPCFactory {
    public static NPC makeNPC(int npcType) {
        if(npcType==1){ return new Enemy1(); }
        elif(npcType==2) {return new Enemy2(); }
    }
}

随着您的代码的增长,您可能希望将int npcType替换为正确的Enum,以使您的代码行为更清晰,以便将来的开发人员(即您未来的自我) )。您还可以根据需要向工厂添加任意数量的参数,从而可以一次性创建具有您需要的任何参数的全功能NPC。