Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
Всем привет!

В jar библиотеке есть класс А, который инициализирует класс В. Класс В инициализирует класс С. Класс С должен вызывать метод у класса А.

Передавать объект класса А в объект класса С можно последовательно из класса в класс через конструкторы или сеттеры, но получается лишний код, т.к. объект класса В не будет фактически использовать объект класса А.

Как правильно передать объект класса А в объект класса С?
17 окт 19, 10:21    [21996139]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
chpasha
Member

Откуда:
Сообщений: 8593
Molasar
класс А, который инициализирует класс В
в доме, который построил Джек. кто на каком стоял? Класс А инициализирует В или В инициализирует А. Лучше бы упрощённый пример кода показал со всеми участниками
17 окт 19, 10:35    [21996157]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
Ошибку понял) Спасибо.
Привожу пример:
public class A {
    B b = new B();
    public void method1() {};      
}
public class B {
    C c = new C();
}
public class C {
    a.method1();
}

Класс С - это слушатель, который по событию должен вызывать method1 у объекта класса А, который первоначальный.
Как правильно передать первоначальный объект класса А в объект класса С?

chpasha
Molasar
класс А, который инициализирует класс В
в доме, который построил Джек. кто на каком стоял? Класс А инициализирует В или В инициализирует А. Лучше бы упрощённый пример кода показал со всеми участниками
17 окт 19, 10:45    [21996183]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar
Как правильно передать объект класса А в объект класса С?
куча вариантов.
- подписка на событие
- DI
- каллбэк
- передать интерфейс от А
- добавить класс Е и все у этого класса подписываются на событие. Тогда А и С не знают друг о друге
17 окт 19, 10:48    [21996188]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar,
Ну и еще вариант, отнаследуй все три класса друг на друге
17 окт 19, 10:53    [21996205]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
Нужен вариант, когда классы А и С не знают друг о друге, возможны подставления других реализаций этих классов.
Что значит - добавить класс Е и все у этого класса подписываются на событие?

PetroNotC Sharp
Molasar
Как правильно передать объект класса А в объект класса С?
куча вариантов.
- подписка на событие
- DI
- каллбэк
- передать интерфейс от А
- добавить класс Е и все у этого класса подписываются на событие. Тогда А и С не знают друг о друге
17 окт 19, 11:07    [21996241]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar
Нужен вариант, когда классы А и С не знают друг о друге,
это и по теории правильно.

Molasar
Что значит - добавить класс Е и все у этого класса подписываются на событие?

Класс посредник. Через него все события проходят. Не понятно? Можно самому написать небольшой.
Еще DI как раз делали чтобы через конструктор не передавать.
17 окт 19, 11:12    [21996251]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar,
Тебе тяжело ответ ставить после цитаты?
17 окт 19, 11:13    [21996253]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
PetroNotC Sharp
Molasar,
Тебе тяжело ответ ставить после цитаты?

Исправился.
17 окт 19, 11:17    [21996263]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
PetroNotC Sharp
Molasar
Нужен вариант, когда классы А и С не знают друг о друге,
это и по теории правильно.

Molasar
Что значит - добавить класс Е и все у этого класса подписываются на событие?

Класс посредник. Через него все события проходят. Не понятно? Можно самому написать небольшой.
Еще DI как раз делали чтобы через конструктор не передавать.

Не понятно про класс посредник.
DI без конструктора вы имеете в виду использование EE или Spring аннотаций?
17 окт 19, 11:25    [21996277]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar
Не понятно про класс посредник.
щас расскажу

Molasar
DI
взять легковесный фреймворк либу для DI. Профи подскажут.
17 окт 19, 11:35    [21996299]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
public class EventList {
    List - списокОповещаемых

    void methodПодписаться() 
     void methodОтписаться() 
     void methodОтправитьСобытие() 
    
}

Понятно?
17 окт 19, 11:43    [21996316]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
PetroNotC Sharp
public class EventList {
    List - списокОповещаемых

    void methodПодписаться() 
     void methodОтписаться() 
     void methodОтправитьСобытие() 
    
}

Понятно?

Данную конструкцию я знаю, но не понятно как использовать ее в моей случае.
Класс С это слушатель сообщений из очереди ActiveMQ. В момент инициализации в объект класса С должен быть помещен объект класса А, иначе сообщения посыпятся, а отправлять их не куда.
17 окт 19, 12:10    [21996363]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar
объект класса В не будет фактически использовать объект класса А.
а зачем он тогда?
Либо он нужен и передай А через него в C, либо не нужен.
17 окт 19, 12:16    [21996372]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar
public class A {
    B b = new B();
    public void method1() {};      
}
public class B {
    C c = new C();
}
public class C {
    a.method1();
}
сюда нужно добавить использование - main()
17 окт 19, 12:19    [21996378]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2446
Molasar,
Не бойся конструкторов если тебе нужны не бины EE.
Ничего при передаче страшного нет, если структура классов верна.
Проверь хелло ворлд на конкретно твои очереди и message-oriented middleware
17 окт 19, 12:31    [21996404]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
Molasar
Member

Откуда:
Сообщений: 773
PetroNotC Sharp
Molasar,
Не бойся конструкторов если тебе нужны не бины EE.
Ничего при передаче страшного нет, если структура классов верна.
Проверь хелло ворлд на конкретно твои очереди и message-oriented middleware

Понял. Буду передавать объект А в объект С через объект В, используя конструкторы.
17 окт 19, 12:48    [21996432]     Ответить | Цитировать Сообщить модератору
 Re: Передача объекта в другие объекты  [new]
chpasha
Member

Откуда:
Сообщений: 8593
Molasar
Буду передавать объект А в объект С через объект В, используя конструкторы.
К сожалению на простом примере понятна задача но не понятна архитектура, в частности не очевидно, почему С должен знать про А и вызывать его метод, будучи внутри В. Также не очевидно, почему метод именно в А.

Лично на мой вкус данная архитектура попахивает. я бы предпочел в данном случае либо "костыль" в виде какой-то Event Bus, когда C получает сообщение, генерирует событие, а все заинтересованные (А) на него реагируют. Либо С генерит событие, В на него подписывается и при получении вызывает А. Но я бы с удовольствием выслушал другие мнения на это счёт
17 окт 19, 14:11    [21996545]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить