Неприятная ситуация, когда в Java необходим доступ к родительским функциям - PullRequest
0 голосов
/ 06 апреля 2009

Я работал на симуляторе экономики на Java и столкнулся с препятствиями. У меня есть класс Economy , которому принадлежит вектор Traders . На каждой итерации эконом-класс вызывает каждого трейдера на обновление () и решает, какие сделки он хочет разместить. Функция update () возвращает нужные транзакции, которые будут добавлены в очередь в родительском классе Economy . Мне удалось правильно реализовать все вышеперечисленное, но мне по-прежнему нужен каждый Трейдер , чтобы видеть, сколько сделок у него в данный момент открыто. Поскольку сделки хранятся в родительском классе Economy , как мне разработать код, чтобы Traders имел доступ к Economy функциям и переменным?

Ответы [ 3 ]

3 голосов
/ 06 апреля 2009

Поскольку классу Trader требуется доступ к методам класса Economy, правильный способ - «внедрить» экземпляр Economy в класс Trader. Вы можете сделать это либо с помощью конструктора:

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

или с установщиком:

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

Будьте осторожны, чтобы правильно спроектировать Эконом класс. Доступ к переменным класса «Эконом» должен быть ограничен только методами класса. Определите методы получения и установки, если вы хотите получить к ним внешний доступ. Насколько я понимаю, трейдеры должны извлекать информацию только из экономики. Они не должны иметь возможность вызывать методы, которые изменяют состояние экономики. Это должно отразиться на вашем дизайне.

Вы можете также рассмотреть определение интерфейса:

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

и реализуем его по Эконом классу. Затем введите трейдеру экономику. Это делает совершенно очевидным, какие части экономики должны использовать трейдеры.

1 голос
/ 06 апреля 2009

Метод update в классе Trader может принимать один аргумент, а именно ссылку на класс Economy , который можно передать с помощью this . Затем Экономика может предоставить методы, необходимые для извлечения желаемой информации.

1 голос
/ 06 апреля 2009
public class Trader {
    private Economy parent;
    ...
    public Trader(Economy parent, ...) {
        this.parent = parent;
    }
}

Теперь у трейдера должен быть доступ к родительской экономике.

Или:

public onUpdate(Economy parent) { ... }

если хотите.

...