Как стать автором
Обновить

Комментарии 2

1. Для чего нужно возвращать передаваемую ноду? Неужто для возможности подмены одного компонента другим? И что будет, если плагину передадим, инапример, кнопку, а он вернёт поле ввода?
2. Почему бы «плагин»(хотя это не плагин, а декоратор) не параметризировать по ноде, чтобы обойтись без проверок на тип и приведения типов?
3. Также не определено время вызова плагина. Что приводит к следующим вопросам:
— когда вызывать плагин? При инициализации, добавлении на форму, активации? Что будет, если вызвать плагин дважды?
— для изменения поведения элемента необходимо слушать события. Как на них оформлять подписку и дективировать ее? Лучше бы еще одним параметром передавать и имя события либо состояния (например, «initialize»)
Для чего нужно возвращать передаваемую ноду?

Вы правы, в данном контексте это не имеет смысла.


Неужто для возможности подмены одного компонента другим? И что будет, если плагину передадим, инапример, кнопку, а он вернёт поле ввода?

Нет, никаких подмен. Код выдернут из контекста. Для рассматриваемой проблемы было бы достаточно void метода.


Почему бы «плагин»(хотя это не плагин, а декоратор) не параметризировать по ноде, чтобы обойтись без проверок на тип и приведения типов?

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


Типизировать можно, но все мои плагины добавляли общий (например, текст с тремя точками) функционал разным Node (в ячейку таблиц и списков, в поле ввода и подписи), писать при этом на каждую Node отдельный плагин означало бы дублирование.


Также не определено время вызова плагина. Что приводит к следующим вопросам:
— когда вызывать плагин? При инициализации, добавлении на форму, активации? Что будет, если вызвать плагин дважды?

Плагин предполагается быть вызванным во время срабатыванию слушателя на изменение коллекции дочерних Node при формировании графа. Повесите такой слушатель на Root сцены, дальше он сделает все сам.


Команда плагинов по умолчанию срабатывает на одну Node ровно один раз. Это обеспечивается хранением в ее свойствах флага-признака. При необходимости можно явно переприменить определенный плагин, тогда в его реализации должно быть заложено поведение на повторное срабатывание.


для изменения поведения элемента необходимо слушать события. Как на них оформлять подписку и дективировать ее? Лучше бы еще одним параметром передавать и имя события либо состояния (например, «initialize»)

В JavaFX есть Observable коллекции. Например, ObservableList будет уведомлять о добавляемых и удаляемых элементах. В моей реализации предполагалось только прослушка добавления новых Node в граф.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории