Pregunta

Estoy creando un juego SIM basado en mosaicos 2D. Tengo una matriz 2D de GridSquares, a las que se accede y cambia de muchas clases y métodos diferentes. ¿Debo pasar la 2da matriz de GridSquares cada vez, o hacerla global? ¿Cuál es la mejor práctica?

Estaba pensando, ¿sería una opción crear una clase que solo contenga un conjunto de variables que todas las clases podrían extender? ¿Es esa una buena o mala idea / no buena práctica?

Todavía soy bastante nuevo en Java, ¡así que todavía estoy aprendiendo mucho!

Gracias por adelantado.

Rey

¿Fue útil?

Solución

No debe diseñar en términos de una estructura de datos. Java es un lenguaje orientado a objetos. Intente pensar en su problema como los objetos que interactúan. No es una matriz 2D; Es un objeto de tablero. Construya el comportamiento para manipular su estado en el problema y ocultar el hecho de que ha elegido una matriz 2D.

No tengo todos los detalles de una junta, pero comenzaría así:

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.
} 

Otros consejos

Páselos en constructores y manténgalos en variables miembros.

Si accede a ellos desde demasiados lugares, probablemente tenga un problema de diseño.

Si tu cierto Tu único que tendrá una 'matriz 2D de Gridsquares', siempre se puede usar el patrón Singleton, essentailly haciéndolo global.

Sin embargo, hay argumentos a favor y en contra de esto, es posible que algún día desee poder precargar los mapas, pero el singleton se interpone (no puede crear una segunda instancia de un singleton).

Si absolutamente necesita, en su clase que contiene la cuadrícula (a) declare la cuadrícula como pública y luego importe la clase una clase estática (import static A;). Esto le permitirá interactuar con la red sin extender la clase A, al menos.

Su código no debe acceder a la cuadrícula desde demasiados lugares. Considere volver a activar su código para evitar tener que manipular la cuadrícula de todo el lugar. Separa sus inquietudes. Y definitivamente no es una buena idea usar la herencia, como mencionó.

Lo que lo recomendaría para que lo haga estático, pero cree una clase definitiva para leer los datos de él, dice GridSquaresacessor. En esta clase escribe todos los métodos para acceder a la matriz. Aún mejor, conviértalo en un campo estático privado de esta clase para evitar que cualquier otro código manipule de una manera no definida en esta clase.

En cada clase que necesita acceso a la matriz, puede pasar un GridSquaresacessor como parámetro en el constructor y mantenerlo almacenado en una variable local.

Personalmente, no me gustan los singletons porque hacen que sea muy difícil probar el código ...

Si su código está multiproceso, asegúrese de hacer que la matriz 2D se sincronice.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top