私はAnimalクラスを持ち、それを 'Sheep'と 'Cow'クラスに拡張したプログラムを作成しています。 私のプログラムでは、 'generate()'が呼び出されたときに新しい動物を作成する 'Farm'クラスもあります。私がプログラムを初期化するとき、各ファームには特定の動物が与えられて生成されます。もっと一般的なクラスからオブジェクトを生成する
私はこれを行ういくつかの方法を考えることができますが、どれも特に素晴らしいとは思われません。私が作ってみた一つの方法は、私のクラスは次のように定められていることです:
は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をタイプ(ファームの場合)とオブジェクト(作成の場合)の両方として使用しています。これに加えて、 'new 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で自分自身で仕事をしなければならなかったが、ここでは完全に失敗した。私は、もちろん、「きちんとしたコードを書く方法を学ぶ」チュートリアルが付属していないWikipedia以外の一般的なプログラミングのパラダイムに関する情報をどこから探し始めるのかは分かりません。
私の質問が漠然としていても、右下であっても意味がない場合は、明確にするようお願いします。
私はここで質問を見つけることができません。 –
完全に私のせいです。何かを実際に尋ねるのを忘れた。私の質問は、このような状況に近づくための最良の方法は何ですか?また、私が上に掲げた解決策よりも簡単な方法がありますか? – Oberdiah
私はここでの問題点についてはっきりしていませんが、オプション2でやっている 'Sheep'クラスの中でoption1で同じことをやってみることはできませんか? – developer