Java — Обработка POJO через интерфейсы или самим классом POJO? Эффективность?

#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 геттера, которые делают одно и то же