Давайте предположим, что у меня есть планеты и звезды классы и класс GameLogic следующим образом(Подключение) методы «Наведение мостов» между удаленными классами
//Planet.java
package Game;
class Planet //invisible outside of package
{
public String getType() {return "Im a Planet";}
}
.
//Star.java
package Game;
class Star //invisible outside of package
{
public String getType() {return "Im a Star";}
}
.
//GameLogic.java
package Game;
public class GameLogic //notice the PUBLIC keyword
{
//arrayList of stars
//arrayList of planets
//a ton of methods for the logic of the game itself
}
Все они принадлежат к пакету игры, который обрабатывает только всю логику игры без ввода/вывода.
Затем в другом пакете UI у меня есть класс Text (UI.Text), который управляет вводом пользователем, выводит на печать и имеет прямой доступ к GameLogic, потому что игра может быть воспроизведена только путем создания экземпляра GameLogic класс.
//Text.java
package UI;
import Game.*;
public class Text
{
//some control vars
//MAIN method
//input and output methods
//bla bla bla
}
Так вопрос: Игра будет конкретизируется в Text.java путем создания экземпляра GameLogic. Учитывая это, если я хотел вывести GetType() функции из Star и планеты, я должен был бы завершить «дорогу», который соединяет текст с Планетой/Star следующим образом
//GameLogic.java
package Game;
public class GameLogic
{
//same as before
public String getPlanetType(int n) {return planetArrayList.get(n).getType();}
public String getStarType(int n) {return starArrayList.get(n).getType();}
}
Короче говоря, Методы getType() уже существуют в «слишком отдаленном» классе, поэтому он заставляет меня создавать эти простые, но повторяющиеся «мостиковые» методы для соединения обоих концов. версия
TL-DR:
class A has getType()
class B has array of A
class C needs to access getType() from array of A in B
Я считаю, что это очень неэффективно и время метод трудоемкий и что есть лучшая альтернатива (возможно, с участием интерфейсов?), так что если кто-нибудь может дать мне некоторую помощь , Я был бы очень благодарен.
Спасибо
прочитайте про * Закон Деметры *, как вы его не нарушаете, находится в каждом конкретном случае, но мое ** мнение ** заключается в том, что вы не должны возвращать их, как это, а непосредственно соответствующий объект. –
Почему Star и Planet не являются общедоступными, если класс Text нуждается в них? Другими словами, если A нуждается в информации о C, он не должен проходить через B, он должен просто иметь доступ к C напрямую. Это «Закон Деметры». –
@ChrisWohlert Это для проекта колледжа, и требуется разделить интерфейс и логику игры на отдельные пакеты, я предполагаю, чтобы научить нас сделать наш код максимально универсальным и адаптируемым, поэтому с ним могут работать разные пакеты. Хотя это и не требуется, я решил сделать только один класс общедоступным, поэтому, импортировав пакет Game, вы можете создать экземпляр самой игры только через один класс. – joaoA