交换机中的新实例

时间:2018-01-17 12:56:28

标签: java design-patterns instantiation

我目前正在学习java和oop。 当我必须根据条件实例化一个新对象时,我遇到了问题。每个对象具有相同的类型。 根据具体情况,我想通过我的对象玩家动物和动物护法来让他们战斗。 (这是一个遇到野蛮人口袋妖怪的玩家)。

switch (animalChosen) {
    case "Chien":
        Animaux playerChien = new Chien(animalName);
        playerChien.displayStat();
        break;
    case "Chat":
        Animaux playerChat = new Chat(animalName);
        playerChat.displayStat();
        break;
    case "Furet":
        Animaux playerFuret = new Furet(animalName);
        playerFuret.displayStat();
        break;
    default
        break;
}

switch (randAnimalSauvage()) {
    case "Chien":
        Animaux chienSauvage = new Chien();
        chienSauvage.displayStat();
        break;
    case "Chat":
        Animaux chatSauvage = new Chat();
        chatSauvage.displayStat();
        break;
    case "Furet":
        Animaux furetSauvage = new Furet();
        furetSauvage.displayStat();
        break;
    default:
        break;
}
Fight letsFight = new Fight(Animaux playerAnimal, Animaux animalSauvage);
letsFight.battle(Animaux playerAnimal, Animaux animalSauvage);

PS:我是法国人,不记得变量名的含义;)

提前致谢

2 个答案:

答案 0 :(得分:1)

你可以做到

Animal animal= null;
switch (animalChosen) {
    case "Chien":
        animal = new Chien(animalName);
        break;
    case "Chat":
        animal = new Chat(animalName);
        break;
    case "Furet":
        animal = new Furet(animalName);
        break;
      default
        break;
 }
 animal.displayStat();

这是有效的,因为(我认为,这就是必要的情况)所有ChienChatFuret都是{{1}的子类(或实现接口,无论它是什么)。

敌人的动物也一样。由于两种情况都相同,因此您只需创建一个函数。

Animal
然后会像这样调用

private Animal byName(String animalName) {
    // same code as above, returning the animal
    return animal;
}

答案 1 :(得分:0)

    Animaux chosenPlayerAnimal;

    switch (animalChosen) {
        case "Chien":
            chosenPlayerAnimal = new Chien(animalName);
            break;
        case "Chat":
            chosenPlayerAnimal = new Chat(animalName);
            break;
        case "Furet":
            chosenPlayerAnimal = new Furet(animalName);
            break;
        default:
            chosenPlayerAnimal = new SomeDefaultAnimal(animalName);
            break;
    }

    Animaux animalSauvage;

    switch (randAnimalSauvage()) {
        case "Chien":
            animalSauvage = new Chien();
            break;
        case "Chat":
            animalSauvage = new Chat();
            break;
        case "Furet":
            animalSauvage = new Furet();
            break;
        default:
            animalSauvage = SomeDefaultAnimal();
            break;
    }

    chosenPlayerAnimal.displayStat();
    animalSauvage.displayStat();

    Fight letsFight = new Fight(chosenPlayerAnimal, animalSauvage);
    letsFight.battle(chosenPlayerAnimal, animalSauvage);

我真的不明白你为什么要用你在构造函数中提供的动物调用Fight.battle()