Question

Je crée une tuile 2D à base de jeu de simulation. J'ai un tableau 2D de gridSquares, qui sont accessibles et modifiables de nombreuses classes et méthodes différentes. Dois-je passer le tableau 2d de gridSquares à chaque fois, ou faire un mondial? Quelle est la meilleure pratique?

Je pensais, serait-il une possibilité de créer une classe qui contient seulement un ensemble de variables toutes les classes pourrait se prolonger? Est-ce une bonne ou une mauvaise idée / pas une bonne pratique?

Je suis encore assez nouveau pour java, donc je suis encore à apprendre beaucoup!

Merci d'avance.

Rel

Était-ce utile?

La solution

Vous ne devriez pas être concevez en termes d'une structure de données. Java est un langage orienté objet. Essayez de penser à votre problème comme des objets en interaction. Ce n'est pas un tableau 2D; il est un objet Conseil. Construire le comportement pour manipuler son état dans le problème et cacher le fait que vous arrive d'avoir choisi un tableau 2D.

Je n'ai pas tous les détails d'un conseil d'administration a travaillé, mais il commencerais comme ceci:

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

Autres conseils

les passer dans les constructeurs et les maintenir dans les variables membres.

Si vous les accès de trop nombreux endroits, vous avez probablement un problème de conception.

Si votre certains votre ne va jamais avoir un « tableau 2d de gridSquares » vous pouvez toujours utiliser le modèle singleton, il essentailly ce monde.

Il y a arguements pour et contre ce que, vous trouverez peut-être un jour vous voulez être en mesure de pré-charger des cartes, mais le singleton est dans la manière (cant créer une deuxième instance d'un singleton).

Si vous devez absolument, dans la grille contenant la classe (A) déclarer la grille en public, puis importer le statiquement Une classe (import static A;). Cela vous permettra d'interagir avec le réseau sans étendre la classe A, au moins.

Votre code ne doit pas être accéder à la grille de trop nombreux endroits. Pensez à réusinage votre code pour éviter d'avoir à manipuler la grille de partout. Séparez vos préoccupations. Et il est certainement pas une bonne idée d'utiliser l'héritage, comme vous l'avez mentionné.

Ce que je recommande pour le rendre statique mais de créer une classe définie pour lire les données qu'il contient, par exemple GridSquaresAcessor. Dans cette classe, vous écrivez toutes les méthodes pour accéder au tableau. Mieux encore, en faire un champ statique privé de cette classe pour éviter tout autre code de manipuler d'une manière non définie dans cette classe.

Dans toutes les classes que vous avez besoin d'accéder au tableau, vous pouvez passer un GridSquaresAcessor comme paramètre sur le constructeur et le garder stocké dans une variable locale.

Je n'aime pas personnellement singletons parce qu'ils rendent très difficile de tester ...

Si votre code est multithread, assurez-vous de faire le tableau 2D synchronisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top