Domanda

Ho lavorato su un simulatore di un'economia in Java e sono imbattuto in un posto di blocco. Ho un Economia di classe che possiede un vettore di commercianti . Ogni iterazione, la classe Economy chiama ogni Trader per aggiornare () e decidere che cosa commercializza vorrebbe posizionare. La funzione di aggiornamento () restituisce le transazioni desiderati da aggiungere alla coda nel genitore Economia di classe. Sono stato in grado di realizzare tutto quanto sopra in modo corretto, ma ho ancora bisogno di ogni Trader per essere in grado di vedere come molti mestieri che ha aperto. Dal momento che i mestieri sono memorizzati nel genitore Economia di classe, come devo progettare il codice in modo che il I commercianti hanno accesso alle funzioni di Economia e variabili ?

È stato utile?

Soluzione

Poiché la classe commerciante ha bisogno di accedere ai metodi della classe Economy, il modo corretto è quello di "iniettare" un'istanza di Economia alla classe Trader. Si può fare sia con il costruttore:

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

o con un setter:

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

Fate attenzione però a progettare la classe Economy correttamente. L'accesso alle variabili della classe Economy deve essere limitato ai soli metodi della classe. Definire getter e setter, se si desidera accedere esternamente. Da quanto ho capito, gli operatori devono estrarre solo le informazioni da un'economia. Non dovrebbero essere in grado di chiamare i metodi che modificano lo stato dell'economia. Ciò dovrebbe riflettersi sul vostro disegno.

Si può anche prendere in considerazione la definizione di un'interfaccia:

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

e attuarlo dalla classe Economy. Poi iniettare un IEconomy al commerciante. Questo rende del tutto evidente quali parti del dell'Economia un commerciante dovrebbe usare.

Altri suggerimenti

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

Ora Trader dovrebbe avere accesso all'economia genitore.

o

public onUpdate(Economy parent) { ... }

se lo si desidera.

Il metodo update nella Trader di classe può assumere un argomento, vale a dire un riferimento al Economia di classe, che è possibile passare con < em> questo . Poi, Economia può fornire i metodi necessari per estrarre le informazioni desiderate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top