2009-04-05 4 views
0

Ich habe an einem Economy-Simulator in Java gearbeitet und bin in einen Roadblock geraten. Ich habe eine Economy Klasse, die einen Vektor von Traders besitzt. Jede Iteration ruft die Economy-Klasse jede Trader zu update() auf und entscheidet, welche Trades sie platzieren möchte. Die Funktion update() gibt die gewünschten Transaktionen zurück, die der Warteschlange in der übergeordneten Klasse Economy hinzugefügt werden sollen. Ich war in der Lage, alle oben genannten korrekt zu implementieren, aber ich brauche immer noch Trader in der Lage zu sehen, wie viele Trades er derzeit geöffnet hat. Da die Geschäfte in der Muttergesellschaft Economy Klasse gespeichert werden, wie soll ich den Code so entwickeln, dass die Traders haben Zugang zu Economy Funktionen und Variablen?Klebrige Situation, wo der Zugriff auf Elternfunktionen in Java erforderlich ist

Antwort

3

Da die Trader-Klasse Zugriff auf die Methoden der Economy-Klasse benötigt, ist es der richtige Weg, der Trader-Klasse eine Instanz einer Economy zu "injizieren". Sie können das tun, entweder mit dem Konstruktor:

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

oder mit einem Setzer:

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

Seien Sie aber vorsichtig richtig die Economy Class zu entwerfen. Der Zugriff auf die Variablen der Economy-Klasse sollte nur auf die Methoden der Klasse beschränkt sein. Definieren Sie Getter und Setter, wenn Sie extern darauf zugreifen möchten. Nach meinem Verständnis sollten Händler nur Informationen aus einer Wirtschaft extrahieren. Sie sollten nicht in der Lage sein, Methoden zu nennen, die den Zustand der Wirtschaft verändern. Dies sollte sich in Ihrem Design widerspiegeln.

Sie können sich auch eine Schnittstelle zu definieren:

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

und es von der Economy-Klasse implementieren. Dann injiziere eine Ieconomy zum Trader. Dies macht deutlich, welche Teile der Economy ein Trader verwenden sollte.

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

Jetzt Trader sollte Zugriff auf die übergeordneten Wirtschaft haben.

Oder:

public onUpdate(Economy parent) { ... } 

, wenn Sie es wünschen.

1

Verfahren Update in der Trader Klasse kann ein Argument, nämlich einen Verweis auf die Economy Klasse, mit der Sie mit diese passieren kann. Dann kann Economy die Methoden bereitstellen, die erforderlich sind, um die gewünschte Information zu extrahieren.