我正在创建一个程序,其中有一个动物类,并扩展了“羊”和“牛”类。 在我的程序中,我还有一个'Farm'类,它将在调用'generate()'时创建一个新的动物。当我初始化该程序时,每个农场都有一个特定的动物来生成。从更普通的类生成对象
我可以想出几种方法来做到这一点,但没有一个看起来特别好。我想出了一个办法是有我的课列明这样的:
public class Farm {
public Animal typeOfAnimalToSpawn;
public Farm(Animal a) {
typeOfAnimalToSpawn = a;
}
public void generate() {
typeOfAnimalToSpawn.spawnMe();
}
}
public abstract class Animal {
public abstract void spawnMe();
}
public class Sheep {
public void spawnMe() {
new Sheep().create();
}
public void create() {
// Spawn this sheep onto the field (By making it visible or something)
// Do whatever needs done when a sheep arrives
}
}
这似乎疯狂复杂难懂的东西,我只能假设有一个简单而优雅的解决方案。在这种情况下,我实际上使用羊作为类型(对于农场)和对象(对于创建时)。最重要的是,它让我误以为新的Sheep()实际上并没有创建一只绵羊,并且只有在调用create()之后才会发生任何事情。它也不适合存放整个动物的一个实例,只是作为农场产生未来动物的类型。
这将是很容易简单地对每一个类型的动物农场:
public abstract class Farm {
public abstract generate();
}
public class SheepFarm extends Farm {
public void generate() {
new Sheep();
}
}
public class Sheep {
public Sheep() {
// Do whatever needs done when a sheep arrives
}
}
这是漂亮和整洁的表面上,但需要额外的,完全无用类为每一个新动物加入到节目。不完全理想。
还有另一种方式,有反思,但我不愿意使用它,因为我确信有一些更明智的做事方式。
所以,我的问题是,处理这种情况的最佳方式是什么,并且比上述解决方案有更简单的方法吗?
我完全自学成功,所以我不知道做事情的正确方法,不得不用Google为自己解决问题,但在这里我完全失败了;我不知道在哪里甚至可以开始寻找关于常见编程范例的信息,当然,除了维基百科,它并不完全符合“学会编写整洁的代码”教程。
如果我的问题脱落模糊甚至降权荒谬的,请你只问我澄清。
我甚至无法在这里找到问题。 –
完全是我的错。忘了问什么。我的问题是:什么是接近的情况下最好的办法,例如这个,有没有做的事情比我已经张贴上述方案中的一个更简单的方法? – Oberdiah
我不是对问题的陈述清楚这里,你为什么不能简单地做同样的事情在'Sheep'类的内部选项1激起你正在做的选项2? – developer