powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / абстрактная фабрика - концептуальный вопрос
25 сообщений из 31, страница 1 из 2
абстрактная фабрика - концептуальный вопрос
    #38549015
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Есть сервис принимающий на вход события разных типов.
Для каждого типа события есть фабрика с помощью которой порождаются специфичные для этого типа события объекты.
Пока все норм, но есть нюанс - может ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику (для получения других объектов из фабрики), к чему это может привести?
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549053
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack,

А почему она не static final?
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549062
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackможет ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику
Может
eJackк чему это может привести?
К чему угодно. Например к сильной связности.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549075
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ссылка - интерфейс, то всё ок.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛагманЕсли ссылка - интерфейс, то всё ок.
осталось рассмотреть всё многообразие ситуаций))
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549106
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123осталось рассмотреть всё многообразие ситуаций))
В точку.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549262
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczPetro123осталось рассмотреть всё многообразие ситуаций))
В точку.

вот все именно так!
это и пугает - где то косячу в архитектуре
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549269
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackвот все именно так!
это и пугает - где то косячу в архитектуре
На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549288
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackможет ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику
может ли элемент дерева - Node содержать в себе указатель на родителя?
- может.
может ли Кнопка иметь ссылку на родителя - Форму где лежит?
и т.д.
Короче, это пуповина ))) LOL
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549360
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczeJackвот все именно так!
это и пугает - где то косячу в архитектуре
На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе.

Ок.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public abstract class EventFactory {
    public static EventFactory getFactory(String eventType) {
        ......
    }

    public abstract Executor getExecutor();

    public abstract Mapper getMapper();
.......
}



собственно для всех типов событий наследуются все типы и переопределяются методы в них.
так вот приходит событие:
Получаем фабрику методом EventFactory.getFactory(...)

Получаем наследника Executor через getExecutor()

И добавляем его в ExecutorService

далее когда начинается выполнятся executer - внутри него создаются объекты Mapper и т.д. которые есть в фабрике.
собственно Executer содержит ссылку на породившую его фабрику.
Код: java
1.
2.
3.
4.
public interface BaseExecutor extends Executor {
    EventFactory getParentFactory();
    
}
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549424
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
многабукаффeJackBlazkowiczпропущено...

На "концептуальный" вопрос можно дать только "концептуальный" ответ. А если взять конкретный случай, то всё может отказаться совершенно иначе.


Ок.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public abstract class EventFactory {
    public static EventFactory getFactory(String eventType) {
        ......
    }

    public abstract Executor getExecutor();

    public abstract Mapper getMapper();
.......
}



собственно для всех типов событий наследуются все типы и переопределяются методы в них.
так вот приходит событие:
Получаем фабрику методом EventFactory.getFactory(...)

Получаем наследника Executor через getExecutor()

И добавляем его в ExecutorService

далее когда начинается выполнятся executer - внутри него создаются объекты Mapper и т.д. которые есть в фабрике.
собственно Executer содержит ссылку на породившую его фабрику.
Код: java
1.
2.
3.
4.
public interface BaseExecutor extends Executor {
    EventFactory getParentFactory();
    
}





Ну, и что мешает в BaseExecutor добавить метод setParentFactory(EventFactory factory) ?
А перед выдачей Executor сделать присвоение...
Правда придётся немного переделать реализацию метода getExecutor().
Например вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
    public Executor getExecutor(){
       Executor executor = internalGetExecutor();
       executor.setParentFactory(this);
       return executor();
    }

    protected abstract Executor internalGetExecutor();
...

Соответственно конкретная фабрика должна будет реализовать не getExecutor(), а internalGetExecutor().
Но здесь есть и обратная сторона медали - Executor будет жестко завязан с фабрикой...
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549517
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Kuznetsov,

Вы наверное не внимательно читали (или я не понятно описал), но суть вопроса не как реализовать ссылку на родительскую фабрику, меня интересует опыт такой реализации, какие потом были проблемы, плюсы и минусы.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549538
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackплюсы и минусы.
Минус - лишняя ссылка в памяти. :)
Минус - фабрика будет жить в памяти пока жив хоть один потомок. :)

Плюс - можно узнать какая фабрика создала объект, особенно если генератор ее синглтона сделан непотокобезапасным.

P.S. надеюсь сеарилизовать объект будете без фабрики?
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549614
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackAlex Kuznetsov,

Вы наверное не внимательно читали (или я не понятно описал), но суть вопроса не как реализовать ссылку на родительскую фабрику, меня интересует опыт такой реализации, какие потом были проблемы, плюсы и минусы.Вроде внимательно прочитал.
Посмотрим:
автор... может ли объект порожденный фабрикой содержать в себе ссылку на родительскую фабрику (для получения других объектов из фабрики), к чему это может привести?
Да, на эти вопросы были даны ответы.

Так что сорри, мой ответ про реализацию - пук в воду...
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549741
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев
P.S. надеюсь сеарилизовать объект будете без фабрики?


не планировал :)
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549752
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackСергей АрсеньевP.S. надеюсь сеарилизовать объект будете без фабрики?


не планировал :)
не планировал сеарилизовать фабрику :)
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549857
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack,

А по-моему, "чистота шаблона" обеспечивается только тем, что каждый создаваемый Executor уже содержит в себе все необходимые свойства. Если хотите, чтобы "почти одинаковые" Executor отличались поведением в зависимости от породившей фабрики - разделяйте их на два (3, 5, 10) разных реализаций Executor и в них уже реализуйте все отличия, чтобы не морочить потом людям голову необходимостью использовать что-то кроеме execute().
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549941
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack,
кажется, я догадался о вашей "сверхзадаче" - создавать "один и тот же объект" разными фабриками (интересно, как это вообще может вписаться в этот шаблон?) - и впоследствии нарушить 1-е правило что не должно быть зависомости от того, как создаются объекты. Те, кто потом наткнутся на этот ваш "шаблон" придут в большое недоумение.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38549968
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пылинкасоздавать "один и тот же объект" разными фабрикам
imho наоборот.
Фабрика создала "Самолёт".
Самолёт из фабрики сам создал "Правое крыло".
Т.е. как будто фабрика глобальный синглетон или инжектится
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38550099
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Извиняюсь, я не готов к такой дискуссии - про крылья ( к тому же даже не указано, о какой "фабрике" идет речь)
Но в любом случае, если работа идет на уровне интерфейсов, то не стоить вносить зависимость в объекты (одного типа) запоминая их историю создания, это как раз спагетти и получится.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38550130
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пылинкане стоить вносить зависимость в объекты (одного типа) запоминая их историю создания
я не увидел ничего криминального в "ссылках на родителя. Фабрика это или ещё что".
А додумывать за автора смысла нет. Он весь код-ТЗ не привёл.
Удачи!
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38550264
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да все просто - есть событие Event.
События различаются по типу - EventType (String).
Так же каждое событие содержит специфичные для этого типа данные.
Каждый тип события имеет свой специфический путь (шаблон) обработки.
Каждый тип события обрабатывается с определенным приоритетом.

Это было общее (приближенное к реальному) ТЗ.


Далее
Получаем событие.

По типу получаем фабрику.

Из фабрики получаем Executor и кладем его в в очередь на обработку (тут на самом деле все немного сложнее, но это не меняет сути).

Когда очередь доходит до Execotor (начинается выполнение), он обращается к родительской фабрики (через ссылку) и создает необходимые для этого типа события объекты. Например парсер (для получения данных события), мапперы, трансформаторы, шаблон обработки (шаблонный метод). Все это через родительскую фабрику.

ПылинкаeJack,

А по-моему, "чистота шаблона" обеспечивается только тем, что каждый создаваемый Executor уже содержит в себе все необходимые свойства. Если хотите, чтобы "почти одинаковые" Executor отличались поведением в зависимости от породившей фабрики - разделяйте их на два (3, 5, 10) разных реализаций Executor и в них уже реализуйте все отличия, чтобы не морочить потом людям голову необходимостью использовать что-то кроеме execute() .


"Чистота шалбона" не цель. Фактически вы предлагаете перенести функции фабрики в Executor (если я правильно уловил мысль), думал об этом, но как по мне сути это не поменяет - хотя может и будет более логичным (но тоже спорно).
Про морочить голову не понял мысли ? Поясните - что сейчас не так?

ПылинкаeJack,
кажется, я догадался о вашей "сверхзадаче" - создавать "один и тот же объект" разными фабриками (интересно, как это вообще может вписаться в этот шаблон?) - и впоследствии нарушить 1-е правило что не должно быть зависомости от того, как создаются объекты. Те, кто потом наткнутся на этот ваш "шаблон" придут в большое недоумение.


не понял откуда такое умозаключение? шаблон абстрактная фабрика - где и что я нарушил?
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38553040
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJackДа все просто - есть событие Event.
События различаются по типу - EventType (String).
Так же каждое событие содержит специфичные для этого типа данные.
Каждый тип события имеет свой специфический путь (шаблон) обработки.
Каждый тип события обрабатывается с определенным приоритетом.
В таком случае, я недоумеваю - зачем хранить ссылку, когда фабрику можно снова получить в любой нужный момент, точно так же, обычным путем?
PS Я ничего вообще не предлагал, это ваше решение как раз превращает Executor в фабрику, я лишь попытался наййти этому какое-то разумное объяснение.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38553306
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПылинкаeJackДа все просто - есть событие Event.
События различаются по типу - EventType (String).
Так же каждое событие содержит специфичные для этого типа данные.
Каждый тип события имеет свой специфический путь (шаблон) обработки.
Каждый тип события обрабатывается с определенным приоритетом.
В таком случае, я недоумеваю - зачем хранить ссылку, когда фабрику можно снова получить в любой нужный момент, точно так же, обычным путем?
PS Я ничего вообще не предлагал, это ваше решение как раз превращает Executor в фабрику, я лишь попытался наййти этому какое-то разумное объяснение.

Тривиально не получите - так как для получения фабрики используется название типа события, но оно не прокидывается в Executor.
Да и тогда получается что давайте все свяжем "сильными" ссылками ну их эти паттерны.
...
Рейтинг: 0 / 0
абстрактная фабрика - концептуальный вопрос
    #38553392
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eJack,
не понял, почему не одна фабрика на все события. Событие - это тоже метатип объекта.
eJackтак как для получения фабрики используется название типа события
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / абстрактная фабрика - концептуальный вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]