我目前正在开发一个简单的Java游戏,有几种不同的模式.我扩展了一个主要的Game类,将主要逻辑放在其他类中.尽管如此,主要的游戏类仍然非常沉重.
在快速浏览一下我的代码后,其中大部分是Getters and Setters(60%),而其余部分则是游戏逻辑真正需要的.
一些谷歌搜索声称Getters和Setters是邪恶的,而其他人声称他们是良好的OO练习和伟大的程序所必需的.
所以我该怎么做?应该是哪个?我应该为我的私人变量更改我的Getters和Setter,还是应该坚持使用它们?
我在下面的代码中关注的是构造函数的参数实际上并没有直接映射到类的实例字段.实例字段从参数中获取值,并且我正在使用initalize方法.此外,我做了一些事情,以便创建的对象可以直接在后面的代码中使用,例如调用drawBoundaries().我觉得它正在做一个抽象意义上创建(初始化)Canvas的意思.
我的构造函数做得太多了吗?如果我添加方法从外部显式调用构造函数中的东西,那就错了.请让我知道你的看法.
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
public Canvas(ParsedCells seedPatternCells) {
initalizeCanvas(seedPatternCells);
}
private void initalizeCanvas(ParsedCells seedPatternCells) {
setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
drawBoundaries();
placeSeedPatternCellsOnCanvas(seedPatternCells);
}
...
Run Code Online (Sandbox Code Playgroud)
PS:对不起,如果这看起来像个愚蠢的问题; 我的代码将由OOP大师审核,我只是担心:-0
编辑:
我读到了一些关于initalizeCanvas()被覆盖的方法的担忧 - 幸运的是这些方法是私有的,不会调用任何其他方法.
无论如何,经过对网络的进一步研究后,我开始喜欢这个...我希望你们同意!! ??
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
private Canvas() {
}
public static Canvas newInstance(ParsedCells seedPatternCells) {
Canvas canvas = new Canvas();
canvas.setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
canvas.drawBoundaries();
canvas.placeSeedPatternCellsOnCanvas(seedPatternCells);
return canvas; …Run Code Online (Sandbox Code Playgroud)