laisse supposer que j'ai des classes planète et Star et classe GameLogic de la manière suivante"Bridging" (Connexion) méthodes entre les classes distantes
//Planet.java
package Game;
class Planet //invisible outside of package
{
public String getType() {return "Im a Planet";}
}
.
//Star.java
package Game;
class Star //invisible outside of package
{
public String getType() {return "Im a Star";}
}
.
//GameLogic.java
package Game;
public class GameLogic //notice the PUBLIC keyword
{
//arrayList of stars
//arrayList of planets
//a ton of methods for the logic of the game itself
}
Tout cela appartient au jeu Game qui ne traite que la logique du jeu sans aucune entrée/sortie. Puis, dans un package différent appelé UI, j'ai la classe Text (UI.Text) qui contrôle les entrées de l'utilisateur, imprime la sortie et a un accès direct au GameLogic car le jeu ne peut être joué qu'en créant une instance de GameLogic classe.
//Text.java
package UI;
import Game.*;
public class Text
{
//some control vars
//MAIN method
//input and output methods
//bla bla bla
}
Donc, la question est la suivante: Le jeu sera instancié dans Text.java en créant une instance GameLogic. Compte tenu de cela, si je voulais sortie les fonctions getType() de Star et Planète, je dois terminer à la « route » qui relie Texte avec Planet/Star de la manière suivante
//GameLogic.java
package Game;
public class GameLogic
{
//same as before
public String getPlanetType(int n) {return planetArrayList.get(n).getType();}
public String getStarType(int n) {return starArrayList.get(n).getType();}
}
En bref, la Les méthodes getType() existent déjà dans une classe "trop lointaine", ce qui me force à créer ces méthodes "bridge" simples et répétitives pour connecter les deux extrémités.
Version TL-DR:
class A has getType()
class B has array of A
class C needs to access getType() from array of A in B
Je crois que c'est une méthode consommant très inefficace et le temps et qu'il ya une meilleure alternative (impliquant éventuellement des interfaces?), Donc si quelqu'un pouvait me donner un peu d'aide , Je serais très reconnaissant.
Merci
en savoir plus sur * La loi de Demeter *, comment vous évitez de le casser, est au cas par cas, mais mon ** avis ** est que vous ne devriez pas revenir ils tapent comme ça mais directement l'objet concerné. –
Pourquoi Star et Planet ne sont-ils pas publics si la classe Text en a besoin? En d'autres termes, si A a besoin d'informations sur C, il ne devrait pas passer par B, il devrait simplement avoir directement accès à C. C'est la "Loi de Demeter". –
@ChrisWohlert Ceci est pour un projet de collège et il est nécessaire de séparer l'interface utilisateur et la logique de jeu dans des paquets distincts, je suppose pour nous apprendre à rendre notre code aussi générique et adaptable que possible. Bien que cela ne soit pas obligatoire, j'ai choisi de ne faire qu'une seule classe publique, donc en important le paquet Game, vous ne pouvez qu'instancier le jeu lui-même à travers une seule classe. – joaoA