2009-04-05 5 views
0

J'ai travaillé sur un simulateur d'économie Java et j'ai rencontré un roadblock. J'ai une classe Économie qui possède un vecteur de Traders. À chaque itération, la classe Economie appelle chaque Trader pour mettre à jour() et décider quels métiers il souhaite placer. La fonction update() renvoie les transactions souhaitées à ajouter à la file d'attente dans la classe Economy. J'ai été en mesure de mettre en œuvre tout ce qui précède correctement, mais j'ai toujours besoin de Trader pour être en mesure de voir combien de métiers il a actuellement ouvert. Depuis les métiers sont stockés dans la classe économie parent, comment dois-je concevoir le code de sorte que le Traders ont accès aux fonctions Economy et les variables?Situation difficile où l'accès aux fonctions parentes est nécessaire en Java

Répondre

3

Étant donné que la classe Trader a besoin d'accéder aux méthodes de la classe Economy, la méthode correcte consiste à "injecter" une instance d'une classe Economy dans la classe Trader. Vous pouvez le faire soit avec le constructeur:

public Trader(Economy economy) { 
    this.economy = economy; 
} 

ou avec un setter:

public void setEconomy(Economy economy) { 
     this.economy = economy; 
    } 

Soyez toutefois prudent de concevoir la classe économie correctement. L'accès aux variables de la classe Économie doit être limité aux méthodes de la classe uniquement. Définissez les getters et les setters si vous voulez y accéder en externe. Si je comprends bien, les commerçants devraient seulement extraire des informations d'une économie. Ils ne devraient pas être en mesure d'appeler des méthodes qui modifient l'état de l'économie. Cela devrait être reflété sur votre conception.

Vous pouvez également envisager de définir une interface:

interface IEconomy { 
    List<Trade> getTrades(Trader trader); 
} 

et la mettre en œuvre par la classe économique. Puis injectez un IEconomy au commerçant. Cela rend assez évident quelles parties de l'économie un commerçant devrait utiliser.

1
public class Trader { 
    private Economy parent; 
    ... 
    public Trader(Economy parent, ...) { 
     this.parent = parent; 
    } 
} 

Maintenant, le négociateur devrait avoir accès à l'économie parente.

Ou:

public onUpdate(Economy parent) { ... } 

si vous le souhaitez.

1

La méthode mise à jour dans le Trader classe peut prendre un argument, à savoir une référence à la classe Economy , que vous pouvez passer en utilisant ce . Ensuite, Economy peut fournir les méthodes nécessaires pour extraire l'information désirée.

Questions connexes