![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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). Но, я не могу пользоваться всеми специфическими свойствами плагина. На данный момент это мне не нужно, но подозреваю, что очень пригодится. К примеру если файловый плагин получил сообщение на входящий файл, он хочет сообщить приват-чату, что есть входящий файл, может даже хочет написать в поле пользователя кнопочку с подтверждением или отменой, как это бывает. |
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
Сильно путанное объяснение.
Мое мнение: 1) Самое краисвое решение: Тебе по любому придется как-то разделить все плагины на несколько категорий и для каждой категории определеить свой интерфейс. Для каждой категории плагинов(т.е. плагинов, которые идейно выполняют одну задачу) написать свой "менеджер" плагинов. Причем, наверное, интерфейс для каждой категории плагинов надо будет объявить как-то так
2) Решение по хуже: Использовать reflection Api |
|||
|
||||
| Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Я этим и руководствуюсь. 2-й вариант я никогда не использую. считаю антинаучно.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |