#java #performance #oop #interface
#java #Производительность #ооп #интерфейс
Вопрос:
Я просматривал несколько проектов игр, похожих на тот, который я разрабатываю, и я видел два способа обработки методов для изменения проигрывателя.
Примечания: автомобиль, дом и работа — это единственные три вещи, которые необходимо обработать. (в эту игру включено только 3 элемента; — таким образом, четвертый элемент, такой как family, никогда не будет существовать) Однако это не означает, что больше никаких полей не будет добавлено и изменено в классе player. (необходимо добавить еще более 100 полей)
Вот общий фреймворк Java и его использование (который я использую в данный момент):
@Data //lombok for setters/getters
public final class Player {
private final Car car = new Car();
private final Job job = new Job("none");
private final House hosue = new House();
public void makeHouseWooden() { //the method exists here in player class
house.setMode(wooden);
house.incrementTimesEdited(1);
house.refreshIfInside();
house.configureNewEnvironment();
}
}
Это то, что я видел в других проектах, и хотел бы следовать, поскольку класс player становится довольно большим с методами:
@Data //lombok for setters/getters
public final class Player implements ContentWorker {
private final Car car = new Car();
private final Job job = new Job("none");
private final House hosue = new House();
@Override
public Player player() {
return this;
}
}
и интерфейс обрабатывает методы, относящиеся к полям в Player.java
public interface ContentWorker {
Player player();
public default void makeHouseWooden() {
House house = player().getHouse();
house.setMode(wooden);
house.incrementTimesEdited(1);
house.refreshIfInside();
house.configureNewEnvironment();
}
}
Я хочу перейти на вторую модель, потому что, если я продолжу в том же духе, что и сейчас, класс Player станет огромным. (более 3000 строк)
Таким образом, я могу сохранить класс Player только для полей (лучшая читаемость), и у меня также мог бы быть интерфейс, который обрабатывает все домашние методы, другой, который обрабатывает все методы car, и другой, который обрабатывает все методы job. (чтобы избежать огромных нечитаемых классов, а также более динамичного взаимодействия, проще найти нужный метод)
public final class Player implements HouseWorker, CarWorker, JobWorker {
Что лучше или «эффективнее» и «проще в использовании» для моего затруднительного положения?
Комментарии:
1. Не было бы лучше иметь метод getHouse() в ContentWorker вместо player()? Таким образом, ContentWorker не привязан к классу Player.
2. @RalfRenz Что вы имеете в виду? getHouse() — это средство получения в классе Player, и оно используется contentWorker для изменения переменных в классе house. Было бы бессмысленно иметь 2 геттера, которые делают одно и то же