2015-10-05 6 views
0

В настоящее время я создаю искатель подземелья. Я обрабатываю все поколения подземелий, генерацию коллизионных коробок, сокровища и поколение врагов, а также создание игроков в одном классе под названием Dungeon. Каждый из объектов, созданных в классе подземелья, имеет getter.Наиболее эффективная практика доступа к объектам в других классах: Java

В основном классе я использую таймер анимации, чтобы обрабатывать все обновления от игрока, открывая сокровища и т. Д. Для этого требуется доступ ко многим объектам, созданным в классе Dungeon.

Я пытаюсь лучше понять использование и использование ссылок на объекты в Java. Мой вопрос: каков более эффективный метод доступа к переменным класса Dungeon (или любого другого класса, если на то пошло), так как я обращаюсь к ним сотни или тысячи раз?

Например, все сокровища в подземелье находятся в переменной ArrayList, которая является переменной-членом класса Dungeon. Итак, я могу получить список массивов в моем основном классе следующим образом: dungeon.getTreasureList(). Если мне нужно получить конкретный элемент в этом ArrayList, я мог бы использовать: dungeon.getTreasureList().get(i), где i - это индекс объекта сокровища, который я хочу. Это нормально для коротких вызовов (организационно говоря), но это становится очень грязным с более длинными вызовами, например: dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls())

В качестве альтернативы я мог бы создать ссылку на список сокровищ в моей главной форме следующим образом: ArrayList<Treasure> treasure = dungeon.getTreasureList(). Тогда, если мне нужен конкретный объект в ArrayList, я могу позвонить: treasure.get(i). Это может очистить длинный вызов выше до чего-то более подобного: player.topIntersects(collisions.getWalls());. Это намного легче читать, и в результате я предпочитаю этот метод немного больше.

Не считая организационных преимуществ, лучше ли создавать ссылку на доступ к переменной для доступа к информации или использовать более длинную форму и геттеры (например, это dungeon.getTreasureList().get(i))?

Кажется, что, создав ссылку для игрока и коллизий в вызове dungeon.getPlayer().topIntersects(dungeon.getCollisions().getWalls()), я сохраняю два вызова функций с помощью player.topIntersects(collisions.getWalls());. А именно, один вызов функции dungeon.getPlayer() и один вызов dungeon.getCollisions().

Поскольку это называется тысячи раз во время игры, кажется безопасным предположить, что я экономлю много тысяч вызовов функций до dungeon.getPlayer() и dungeon.getCollisions(), что приводит к более эффективному коду. Правильно ли я в этом предположении?

EDIT: Попытка сделать вопрос более объективным и менее мнение, основанное и исправлениями вводящим в заблуждение фразировки

+1

Я чувствую, что это немного запах кода; возможно, попытайтесь реорганизовать свои логические и классовые обязанности. Помните ** Принцип единой ответственности ** https://en.wikipedia.org/wiki/Single_responsibility_principle – Michael

+0

Я должен немного разъяснить, класс Dungeon обрабатывает все вызовы другим классам поколений. Карта подземелья создается в своем классе, сокровища генерируются в их собственном классе, враги генерируются в их собственном классе и т. Д.Я реорганизовал кучу Main, чтобы убедиться, что основная ответственность несет ответственность за обновление и повторную визуализацию, когда происходят изменения в цикле обновления. – MKreegs

ответ

4

Мое мнение таково, что этот вопрос будет закрыт в ближайшее время, потому что это слишком мнение на основе.

Но если бы я сделал свое мнение, я бы сказал, что позволить классам получать доступ к частным коллекциям, а затем работать с ними - это плохая инкапсуляция.

Лучше скрыть эти детали и предоставить методы для предоставления необходимой информации, не отрывая частных деталей.

+0

Я попытался изменить свой вопрос, чтобы сделать его менее основанным на мнениях и более объективным. Спасибо что подметил это. Я все еще учу, как лучше всего использовать SO. – MKreegs