Pergunta

Eu tenho trabalhado em um simulador de economia em Java e deparou com um obstáculo. Eu tenho um Economia classe que possui um vetor de Traders . Cada iteração, a classe Economy chama cada Trader para atualizar () e decidir o que comercializa ele gostaria de lugar. A função update () retorna as transações desejadas para ser adicionado à fila no pai Economia classe. Eu era capaz de implementar todas as opções acima corretamente, mas eu ainda preciso de cada Trader para ser capaz de ver quantos comércios que ele tem atualmente aberto. Uma vez que os comércios são armazenados na matriz Economia classe, como devo projetar o código para que o Traders não têm acesso a Economia funções e variáveis ?

Foi útil?

Solução

Uma vez que a classe comerciante tem acesso aos métodos da classe Economy, o caminho correto é "injetar" uma instância de uma economia para a classe Trader. Você pode fazer o que quer com o construtor:

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

ou com um setter:

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

Tenha cuidado no entanto para projetar o Classe económica corretamente. Acesso às variáveis ??da classe Economy deve ser restrito a apenas os métodos da classe. Definir getters e setters se você quiser acessá-los externamente. Pelo que entendi, os comerciantes só deve extrair informações de uma economia. Eles não deve ser capaz de chamar métodos que modificam o estado da economia. Isto deve ser refletido em seu design.

Você também pode considerar a definição de uma interface:

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

e implementá-lo pela classe Economy. Em seguida, injetar um IEconomy ao Trader. Isso torna bastante evidente que partes da economia de um Trader deve usar.

Outras dicas

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

Agora Trader devem ter acesso à Economia pai.

Ou:

public onUpdate(Economy parent) { ... }

se desejar.

O método Atualização na Trader classe pode levar um argumento, ou seja, uma referência ao Economia classe, que você pode passar usando < em> este . Então, Economia pode fornecer os métodos necessários para extrair a informação desejada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top