我正在创建一个基于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阵列同步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top