我正在编写动画程序,其中许多球都跑来跑去弹跳。
我制作了Ball
类来代表球的行为。
当我用另一个球实施球的collisioin时,
我必须检查所有其他球
所以我上了这堂课。
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.
}
}
}
这种设计(将所有对象保存在私有静态列表中)是好还是坏?
答案 0 :(得分:7)
你应该拥有一个BallManager
类来处理这些东西。
public class BallManager {
private static BallManager instance = new BallManager();
private BallManager(){}
public static BallManager getInstance() {
return instance;
}
public List<Ball> ballsInPlay = new ArrayList<>();
public void createBall(int x, int y) {}
public void checkCollisions() {
// loop ball list and check collisions
// perform cleanup based on collisions
}
private void ballCleanup(){}
}
public class Ball{
public Ball(){}
public void collision(Ball other){}
}
注意:从静态类更改为单例。另外,通过在checkCollisions方法
之后添加()来修复编译错误答案 1 :(得分:0)
使用枚举创建Singleton BallManager。
enum singleton最好用。
改善之前的答案。
public enum BallManager {
INSTANCE;
public List<Ball> ballsInPlay = new ArrayList<>();
public void createBall(int x, int y) {}
public void checkCollisions() {
// loop ball list and check collisions
// perform cleanup based on collisions
}
private void ballCleanup(){}
}
public class Ball{
public Ball(){}
public void collision(Ball other){}
}