Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плагины кучкуются, или как помочь им взаимодействовать 
V
    Опции темы
Platon
Дата 14.2.2008, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Здравствуйте, уважаемые!

Завела меня извилистая тропа к созданию приложения, которое строится на плагинах. Вроде ничего всё хорошо работает... но по отдельности. Теперь хочется работу этих плагинов скооперировать. Т.е. вот пример:

Аська. Плагины: приват-чат, файлозакачка, директ коннект.

Ситуации: 1. у нас есть п-ч и больше ничего, 2. у нас есть п-ч и некоторые плагины. 3. у нас есть все плагины.

Приват-чат знает о существовании других 3-х плагинов, а эти 3 не знают.

Теперь я хочу разместить кнопочки к кадому из этих 3-х плагинов на панели приват чата. Для этого у меня есть движок, в котором все плагины зарегистрировались типа так: registerPlugin(String name, Plugin plugin)
не составит труда определить, существует ли этот плагин в системе, но взаимодействовать мы с ним сможем только на уровне интерфейса Plugin
И вот она загвоздка: если я попробую сузить интерфейс до конкретного плагина, к примеру FileLoaderPlugin мне придется делать import plugins.FileLoaderPlugin, а это как-то анти-научно, и наверно даже выдаст ошибку при загрузке п-ч плагина, если файловый плагин отсутствует.

Как бы так обхитрить эту ситуацию?

Добавлено через 6 минут и 42 секунды
У меня у самого такая мысль: при добавлении кнопок на панель приват-чата, мне достатьчно знать существует ли плагин с таким то именем в системе.
Расширить интерфейс плагина, добавив 2 метода : activate() и activate(String user).
Но, я не могу пользоваться всеми специфическими свойствами плагина. На данный момент это мне не нужно, но подозреваю, что очень пригодится.

К примеру если файловый плагин получил сообщение на входящий файл, он хочет сообщить приват-чату, что есть входящий файл, может даже хочет написать в поле пользователя кнопочку с подтверждением или отменой, как это бывает.
PM MAIL ICQ   Вверх
Dude03
Дата 14.2.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Сильно путанное объяснение.

Мое мнение: 

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

public interface FileLoaderPlugin extends Plugin {

}

public interface MessagHandlerPlugin extends Plugin {

}

// и т.д.


2) Решение по хуже:
Использовать reflection Api


PM MAIL   Вверх
Platon
Дата 14.2.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Я этим и руководствуюсь. 2-й вариант я никогда не использую. считаю антинаучно.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.