我应该使用全局变量还是通过Java中的变量?
-
16-09-2019 - |
题
我正在创建一个基于2D瓷砖的SIM卡游戏。我有一个2D阵列的网格squares,它们可以从许多不同的类和方法中访问和更改。我应该每次都通过2D网格阵列,还是将其作为全球?哪个是最佳实践?
我在想,这是创建一个只包含所有类都可以扩展的变量的类的选择吗?这是一个好主意 /不好的做法吗?
我仍然是Java的新手,所以我还在学习很多!
提前致谢。
rel
解决方案
您不应根据数据结构进行设计。 Java是一种面向对象的语言。尝试将您的问题思考作为对象交互。这不是2D阵列;这是一个板对象。建立将其状态操纵到问题的行为,并掩盖您碰巧选择了2D数组的事实。
我没有董事会的所有细节,但这会从这样开始:
public class Board
{
// This is what you're passing around now; Board hides it.
// Square is the abstraction of a position on the Board
private Square[][] grid;
public Board(int nRows, int nCols)
{
this.grid = new Square[nRows][];
for (int i = 0; i < this.grid[i].length; ++i)
{
this.grid[i] = new Square[nCols];
}
}
// Now add methods for adding Pieces to the Board, rules for moving them, etc.
}
其他提示
将它们传递到构造函数中,并将其固定在成员变量中。
如果您从太多地方访问它们,则可能会有设计问题。
如果你的 肯定 您唯一会拥有一个“ 2D网格”阵列',您总是可以使用Singleton模式,从而使其成为全球。
不过,有一些争论和反对这一点,您可能会发现有一天您想预订地图,但是Singleton妨碍了(不能创建第二个单身人士)。
如果您绝对需要,在您的网格类中(a)将网格声明为公共,然后静态地导入A类(import static A;
)。这将使您至少在不扩展A类的情况下与网格进行交互。
您的代码不应从太多地方访问网格。考虑重新分配您的代码,以避免不得不操纵整个地方的网格。分开您的担忧。就像您提到的那样,使用继承绝对不是一个好主意。
GridSquaresCessor说,我建议它使其变得静态,但要创建一个确定的类来读取数据。在此类中,您编写所有访问数组的方法。更好的是,使其成为此类的私人静态字段,以避免以此类未定义的方式操纵任何其他代码。
在每个类中,您都需要访问该数组,您可以将一个GridSquaresacessor作为构造函数上的参数传递,并将其存储在本地变量中。
我个人不喜欢单例,因为它们很难测试代码...
如果您的代码是多线程,请确保使2D阵列同步。