Подходящий способ передать экземпляр класса другим классам (Java)

1

У меня есть основной класс, который имеет ряд связанных с экземпляром методов, которые часто необходимы в других классах, и я часто обнаруживаю, что передаю экземпляр основного класса в конструкторе. Я часто нахожу, что это несколько слоев с классами, имеющими экземпляры основного класса, которые были скопированы из экземпляра в экземпляр, который я не могу себе представить, хорошо для использования в памяти.

Есть ли способ сделать это, не передавая экземпляр в конструкторе или методе или, по крайней мере, способ уменьшить память, используемую экземплярами основного класса.

Чтобы было ясно, что я не ищу статические методы, он предназначен для того, чтобы иметь более одного экземпляра основного класса.

Пример кода:

public class Main {
    public Main() {
        Class2 class2 = new Class2(this);
    }

    public void someMethod() {
        //Do something
    }
}

public class Class2 {
    private final Main instance;

    public Class2(Main instance) {
        this.instance = instance;
        Class3 class3 = new Class3(instance);
    }
}

public class Class3 {
    private final Main instance;

    public Class3(Main instance) {
        this.instance = instance;
        instance.someMethod();
    }
}
  • 1
    вы понимаете, что поля используют только 32/64 бита памяти, поскольку они являются просто ссылками на ваш экземпляр, верно? Таким образом, у вас на самом деле нет «проблемы с памятью» здесь.
  • 0
    Сок? Весна? Внедрение зависимостей - разделение - это ключ !! И если кто-то скажет вам сделать метод статичным или сделать что-то еще, чтобы сделать ваш код не совместимым с ООП, сделайте себе одолжение и просто игнорируйте их.
Показать ещё 3 комментария
Теги:
instance

3 ответа

1

Вы можете использовать шаблон проектирования инъекций зависимостей.

Dependency-Injection-Дизайн-шаблон

Spring, Google Guice и Java EE CDI облегчают процесс внедрения зависимостей с использованием API Java Reflection API и аннотаций java. Все, что нам нужно, это аннотировать метод поля, конструктора или сеттера и настроить их в конфигурационных файлах или классах xml.

  • 1
    Я обнаружил, что внедрение зависимости Spring с файлами конфигурации является решением, которое хуже, чем проблема. Обычно файлы конфигурации, необходимые при развертывании, отличаются от файлов конфигурации, используемых в тесте, поскольку последние часто используют макеты или заглушки, чтобы избежать необходимости тестирования в среде полного стиля развертывания. В результате файлы конфигурации развертывания никогда не тестируются и вызывают проблемы в работе.
  • 0
    @WarrenDew Я не настаиваю на том, чтобы OP использовал Spring Framework только для этого. OP может выбирать согласно требованию.
Показать ещё 3 комментария
1

Вы также можете использовать инъекцию зависимостей для передачи зависимых атрибутов или объектов требуемым классам. Одной из таких популярных схем является Google Guice.

-1

Вы можете создавать методы типа someMethod() в статическом классе Main, или если это невозможно, сделайте сам класс Main одним сингл.

Пример прежнего подхода:

public class Main {
    public Main() {
        Class2 class2 = new Class2(this);
    }

    public static void someMethod() {
        //Do something
    }
}

Теперь вам больше не нужно передавать экземпляр Main, потому что другие классы могут просто вызвать Main.someMethod() напрямую.

  • 0
    Хм, откаты без причины. Я предполагаю, что есть люди, которые на самом деле не пишут код, который должен быть развернут и работать.
  • 1
    Из моего понимания, если бы я сделал метод в основном классе статическим, он не смог бы вернуть экземпляр, поскольку метод принадлежит классу, а не объекту.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню