私は、多くのボールが走り回っていて、バウンスしているアニメーションプログラムを書いています。すべてのオブジェクトが含まれているプライベート静的リスト
ボールの動作を表すBall
クラスを作成しました。
別のボールでボールのコリシンを実装すると、
他のすべてのボールをチェックする必要があります。
私はこのクラスを作った。
public class Ball{
private static final List<Ball> allBalls;
static{
allBalls = new ArrayList<>();
}
private Ball(){}
public static Ball getNewBall(){
Ball ball = new Ball();
allBalls.add(ball);
return ball;
}
public void collision(){
for(Ball b : allBalls){
//check whether b is colliding with me
//and if colliding, change speed of me and b.
}
}
}
このようなデザイン(プライベート静的リストのすべてのオブジェクトを保持する)は良いか悪いですか?
「getNewBall」は**ファクトリメソッド**と呼ばれ、静的でなければなりません。しかし、それは素晴らしいデザインです。既に答えられているように、別の**ファクトリクラス**は静的でなく、ファクトリインスタンスが1つしかないという利点があります。 –
@JoopEggenありがとうございます。私の「プライベート静的リストとプライベートコンストラクタ」デザインの欠点をより詳細に説明できますか? –
ボールがある赤い部屋とボールがある青い部屋があるとします。それから、あなたは運がありません。ユニットテストの場合も同様です。もちろん、グローバル変数であり、クラスを使用するとすぐに初期化されます。これとは対照的に、BallFactory(またはBallManager、BallRoom、またはBalls)は、意図的に、静的に、またはそれ以上で作成することができるため、より自由です。 –